C# 应用程序未保存到 xml [关闭]
Posted
技术标签:
【中文标题】C# 应用程序未保存到 xml [关闭]【英文标题】:C# app not saving to xml [closed] 【发布时间】:2013-12-13 00:13:56 【问题描述】:我是第一次使用 xml,并且一直被它的保存/加载方面所困扰。我希望在应用程序关闭时将文本框中的信息保存到 xml 文件中,但是当应用程序运行时,我无法使用右上角的“X”关闭应用程序。我尝试删除 xml 文件和重新创建它,但这仍然没有帮助。
我现在关闭了应用程序,保存功能确实适用于 xml。然而,加载函数并没有通过它的 foreach 循环将 xml 中的信息添加回应用程序
XmlDocument xDoc = new XmlDocument();
xDoc.Load(path + place);
foreach( XmlNode xNode in xDoc.SelectNodes("ClientMeasurements\\Client"))
Client c = new Client();
c.Name = xNode.SelectSingleNode("Name").InnerText;
c.InitialForearm = xNode.SelectSingleNode("InitialForearm").InnerText;
c.InitialUpperArmR = xNode.SelectSingleNode("InitialUpperArmRight").InnerText;
c.InitialUpperArmL = xNode.SelectSingleNode("InitialUpperArmLeft").InnerText;
c.InitialChest = xNode.SelectSingleNode("InitialChest").InnerText;
c.InitialWaist = xNode.SelectSingleNode("InitialWaist").InnerText;
c.InitialHips = xNode.SelectSingleNode("InitialHips").InnerText;
c.InitialThighR = xNode.SelectSingleNode("InitialThighRight").InnerText;
c.InitialThighL = xNode.SelectSingleNode("InitialThighLeft").InnerText;
c.InitialCalfR = xNode.SelectSingleNode("InitialCalfRight").InnerText;
c.InitialCalfL = xNode.SelectSingleNode("InitialCalfLeft").InnerText;
c.MostRecentForearm = xNode.SelectSingleNode("MostRecentForearm").InnerText;
c.MostRecentUpperArmR = xNode.SelectSingleNode("MostRecentUpperArmRight").InnerText;
c.MostRecentUpperArmL = xNode.SelectSingleNode("MostRecentUpperArmLeft").InnerText;
c.MostRecentChest = xNode.SelectSingleNode("MostRecentChest").InnerText;
c.MostRecentWaist = xNode.SelectSingleNode("MostRecentWaist").InnerText;
c.MostRecentHips = xNode.SelectSingleNode("MostRecentHips").InnerText;
c.MostRecentThighR = xNode.SelectSingleNode("MostRecentThighRight").InnerText;
c.MostRecentThighL = xNode.SelectSingleNode("MostRecentThighLeft").InnerText;
c.MostRecentCalfR = xNode.SelectSingleNode("MostRecentCalfRight").InnerText;
c.MostRecentCalfL = xNode.SelectSingleNode("MostRecentCalfLeft").InnerText;
client.Add(c);
listView1.Items.Add(c.Name);
【问题讨论】:
不能点击关闭按钮是什么意思?是不是变灰了?单击它时它会挂起吗? 当我点击它时应用程序没有响应。它没有变灰,按钮单击,但不会关闭应用程序。 你试过下断点,看看哪一行代码或方法调用有问题吗? 否,因为应用程序运行良好,但不会关闭并保存到 xml 文件。我认为断点仅适用于代码导致崩溃的地方 调试您的代码 - 放置断点并逐步查看发生了什么...如果它没有帮助 - 制作重现问题的 small 示例(查看 @ 987654321@) - 现在你有很多几乎相同的代码行,没有添加任何关于问题的新信息。旁注:带空格的节点名称对于 XML 来说是一种不寻常的做法,并且在创建节点时会导致错误,我假设您的节点名称只是示例而不是真实的。 【参考方案1】:使用 XML 序列化有一种更简单的方法。
Here 是一篇让您入门的文章。
基本上你想用 [Serializeable]
装饰你的 Client 类,然后使用类似这样的东西从 XML 文件中保存和加载你的 clients
对象(我假设它是某种集合):
public static void SerializeObject<T>(T serializableObject, string fileName)
if (serializableObject == null) return;
try
XmlDocument xmlDocument = new XmlDocument();
XmlSerializer serializer = new XmlSerializer(serializableObject.GetType());
using (MemoryStream stream = new MemoryStream())
serializer.Serialize(stream, serializableObject);
stream.Position = 0;
xmlDocument.Load(stream);
xmlDocument.Save(fileName);
stream.Close();
catch (Exception ex)
Console.WriteLine(ex.Message);
//Log exception here
public static T DeSerializeObject<T>(string fileName)
if (string.IsNullOrEmpty(fileName)) return default(T);
T objectOut = default(T);
try
string attributeXml = string.Empty;
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(fileName);
string xmlString = xmlDocument.OuterXml;
using (StringReader read = new StringReader(xmlString))
Type outType = typeof(T);
XmlSerializer serializer = new XmlSerializer(outType);
using (XmlReader reader = new XmlTextReader(read))
objectOut = (T)serializer.Deserialize(reader);
reader.Close();
read.Close();
catch (Exception ex)
//Log exception here
return objectOut;
【讨论】:
感谢您的回复,但我想知道代码现在的方式有什么问题,导致无法保存/加载以供将来参考以上是关于C# 应用程序未保存到 xml [关闭]的主要内容,如果未能解决你的问题,请参考以下文章