当尝试使用获取空数组的属性解析xml时

时间:2016-07-13 06:10:49

标签: c# .net xml

我试图序列化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; }。我试过两个,但价值变得空虚。

1 个答案:

答案 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