【发布时间】:2016-09-23 10:15:33
【问题描述】:
我有一个 WPF C# 程序,有一次我需要将对象序列化为 XML。在其他地方,我一直在使用这个:
TextWriter writer = new StreamWriter(xmlFilePath);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MYOBJECT_TYPE));
try
{
xmlSerializer.Serialize(writer, MYOBJECT);
}
catch (Exception ex)
{
MessageBox.Show("Exception occured while writing to Xml" + ex.Message);
}
finally
{
writer.Close();
}
这太棒了,但这意味着我必须为每个要序列化的对象使用不同的 XML 文件。如何使用此方法(修改最少)将对象序列化为 XML WITHIN a parent element?这样,当我以后想反序列化对象时,我可以找到我想要的元素,并反序列化该元素中的所有内容。
根据要求,这里是CreateDefaultXml();:
static void CreateDefaultXml()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<StoredObjects></StoredObjects>");
XmlNode root = doc.DocumentElement;
try
{
doc.Save(xmlFilePath);
}
catch (Exception ex)
{
Console.WriteLine("Exception occured while creating Xml" + ex.InnerException);
}
}
编辑:
目前,这就是我所拥有的(但它会引发异常 There was an error generating the XML document.)
if (!File.Exists(xmlFilePath))
CreateDefaultXml();
XDocument doc = XDocument.Load(xmlFilePath);
var element = doc.Descendants("Object").Where(x => x.Attribute("Name").Value.Equals("objectName")).SingleOrDefault();
if (element == null)
{
element = new XElement("Object", new XAttribute("Name", objectName));
doc.Element("StoredObjects").Add(element);
}
XmlWriter writer = element.CreateWriter();
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MYOBJECT_TYPE));
try
{
xmlSerializer.Serialize(writer, MYOBJECT);
}
catch (Exception ex)
{
MessageBox.Show("Exception occured while writing to Xml: " + ex.Message);
}
finally
{
writer.Close();
doc.Save(xmlFilePath);
}
【问题讨论】:
-
1) 什么是
shape?在shape.CreateWriter();行中,它是未定义的。 2) 可以分享CreateDefaultXml();吗? -
@dbc 对不起。我已经更新了问题
-
我将
MessageBox.Show改为显示ex.InnerException并得到System.InvalidOperationException: WriteStartDocument cannot be called on writers created with ConformanceLevel.Fragment.
标签: c# xml wpf serialization