我有这个XML:
<A>
<B>hello</B>
<C>bye</C>
<D>
<E>111</E>
<F>222</F>
</D>
</A>
这堂课
[XmlRoot("A")]
public class A
{
public string B { get; set; }
public string C { get; set; }
public System.Xml.XmlElement D { get; set; }
}
如您所见,我对将“ D”建模为类不感兴趣。
我正在以这种方式反序列化:
string xml = "<A><B>hello</B><C>bye</C><D><E>111</E><F>222</F></D></A>";
XmlSerializer serializer = new XmlSerializer(typeof(A));
using (StringReader reader = new StringReader(xml))
{
A a = (A)serializer.Deserialize(reader);
Console.WriteLine(a.D.OuterXml); // <-------
}
我当前的控制台输出是:
<E>111</E>
...这是一个奇怪的行为,因为<D>
里面有两个项目,但是反序列化器只保存了第一个
问题:如何获得此控制台输出?
<E>111</E><F>222</F>
答案 0 :(得分:2)
将XmlAnyElement
属性应用于属性D
。
它的内部Xml将包含<E>111</E><F>222</F>
。
<E>111</E><F>222</F>
作为OuterXml
无效,因为它缺少根元素。
[XmlRoot("A")]
public class A
{
public string B { get; set; }
public string C { get; set; }
[XmlAnyElement()]
public XmlElement D { get; set; }
}
答案 1 :(得分:1)
您可以在D
上使用XmlAnyElement
属性:
[XmlAnyElement]
public XmlElement D { get; set; }
指定成员(返回XmlElement或XmlNode对象的数组的字段)包含的对象表示任何在序列化或反序列化的对象中没有对应成员的XML元素。