我试图序列化xml,像这样的样本结构
<nodes>
<node1>87576</node1>
<node2>10</node2>
<crsa>
<crsa x="0">3487</crsa>
<crsa x="1">0</crsa>
<crsa x="2">0</crsa>
</crsa>
<node3>0</node3>
<node4>131</node4>
</nodes>
这是生成的类。
[XmlRoot(ElementName = "nodes")]
public class Nodes
{
[XmlElement(ElementName = "node1")]
public string node1 { get; set; }
[XmlElement(ElementName = "node2")]
public string node2 { get; set; }
[XmlElement(ElementName = "node3")]
public string node3 { get; set; }
[XmlElement(ElementName = "crsa")]
public Crsa[] crsa { get; set; }
[XmlElement(ElementName = "node4")]
public string node4 { get; set; }
}
[XmlRoot(ElementName = "crsa")]
public class Crsa
{
[XmlAttribute("x")]
public string X { get; set; }
[XmlText]
public string Text { get; set; }
}
当我将xml序列化到类时,crsa
数组值变空。其他节点值正确序列化。
当我使用http://xmltocsharp.azurewebsites.net/生成课程时,Crsa
不是数组public Crsa crsa { get; set; }
。我试过两个,但价值变得空虚。
答案 0 :(得分:1)
<crsa>
个节点同时具有相同名称的外部元素和内部元素。要以这种方式使用外部容器元素序列化Crsa[]
集合,您需要使用[XmlArray]
而不是[XmlElement]
来装饰crsa
属性:
[XmlRoot(ElementName = "nodes")]
public class Nodes
{
[XmlElement(ElementName = "node1")]
public string node1 { get; set; }
[XmlElement(ElementName = "node2")]
public string node2 { get; set; }
[XmlElement(ElementName = "node3")]
public string node3 { get; set; }
[XmlArray("crsa")]
[XmlArrayItem("crsa")]
public Crsa[] crsa { get; set; }
[XmlElement(ElementName = "node4")]
public string node4 { get; set; }
}
内部[XmlArrayItem]
属性设置嵌套元素的名称。
示例fiddle。