【发布时间】:2015-02-22 00:58:33
【问题描述】:
我正在尝试使用 XDocument 作为基础将对象列表序列化为 XML。这样做的目的是在 WCF 服务中记录请求数据。
我的问题是如何获取对象的可变列表并将它们转换为 XDocument?我能找到的所有示例都是如何针对单个对象而不是针对不同复杂类型的多个对象执行此操作。
我想要的输出是这样的:
<rootElementName>
<CustomObjectType1>
<SubData1>Test</SubData1>
<SubData2>2014-12-22T16:33:00</SubData2>
</CustomObjectType1>
<CustomObjectType2>
<SubData3>123456</SubDataType2>
</CustomObjectType2>
</rootElementName>
最初我是从其他 Stackoverflow 示例中拼凑出来的,但我想改用 XDocument。
private static XmlDocument CreateXmlFromObjects(string rootElementName, params object[] inputs)
{
var doc = new XmlDocument();
var root = doc.AppendChild(doc.CreateElement(rootElementName));
doc.DocumentElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
doc.DocumentElement.SetAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
foreach(var input in inputs)
{
SerializeAppend(doc, input);
}
return doc;
}
private static void SerializeAppend(XmlNode parentNode, object obj)
{
XPathNavigator nav = parentNode.CreateNavigator();
using (var writer = nav.AppendChild())
{
var serializer = new XmlSerializer(obj.GetType());
writer.WriteWhitespace("");
serializer.Serialize(writer, obj);
writer.Close();
}
}
我尝试使用来自here 和here 的代码示例,但出现错误。
我试过了
private static XDocument CreateXmlFromObjects(string rootElementName, params object[] inputs)
{
var doc = new XDocument();
doc.Add(new XElement(rootElementName, inputs.Select(x => SerializeAppend2(x))));
return doc;
}
private static XDocument SerializeAppend2(object obj)
{
var document = new XDocument();
using (var writer = document.CreateWriter())
{
var serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(writer, obj);
}
return document;
}
【问题讨论】:
标签: c# xml xml-serialization linq-to-xml