编程语言
首页 > 编程语言> > c#-用List <>将Xml字符串反序列化为对象

c#-用List <>将Xml字符串反序列化为对象

作者:互联网

我正在尝试将xml字符串反序列化为自定义类,但是我可以在我的“ Riesgo”字段中填充asegurado类:

<xml xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
    <CodPostal>28029</CodPostal>
    <Canal>216 </Canal>
    <FormaPago>M</FormaPago>
    <ConSeguro>N</ConSeguro>
    <FechaEfecto>01/01/2014</FechaEfecto>
    <Riesgo>
        <asegurado>
            <sexo>H</sexo>
            <edad>37</edad>
            <parentesco>M</parentesco>
        </asegurado>
        <asegurado>
            <sexo>M</sexo>
            <edad>34</edad>
            <parentesco>C</parentesco>
        </asegurado>
        <asegurado>
            <sexo>H</sexo>
            <edad>4</edad>
            <parentesco>D</parentesco>
        </asegurado>
    </Riesgo>
</xml>

我已经尝试了几件事,但是Riesgo中的List总是为空.

 public class TarificadorObject
    {

        [DataContract]
        [Serializable]
        [XmlRoot("xml")]
        public class TarificadorIn
        {
            [XmlElement("CodPostal")]
            public Int32 CodPostal { get; set; }
            [XmlElement("Canal")]
            public Int32 Canal { get; set; }

            [XmlElement("Riesgo")]
            [XmlArrayItem("asegurado", Type = typeof (Asegurado))]
            public List<Asegurado> asegurado
            {
                get { return _asegurados;  }
                set { _asegurados = value; }
            }

            [XmlElement("FechaEfecto")]
            public string FechaEfecto { get; set; }

            private List<Asegurado> _asegurados = new List<Asegurado>();
        }



        [Serializable]
        public class Asegurado
        {
            [XmlAttribute("sexo")]
            public string sexo { get; set; }
            [XmlAttribute("edad")]
            public Int32 edad { get; set; }
            [XmlAttribute("parentesco")]
            public string parentesco { get; set; }
        }
    }

解决方法:

你要:

[XmlArray("Riesgo")]
[XmlArrayItem("asegurado", Type = typeof (Asegurado))]

不是XmlElementAttribute(这会使列表内容直接放在父项的下面).

实际上,如果您愿意,您可以更加节俭.类型是隐式的(从列表中),如果需要,可以省略.

还要注意这些是错误的:

[XmlAttribute("sexo")]
public string sexo { get; set; }
[XmlAttribute("edad")]
public Int32 edad { get; set; }
[XmlAttribute("parentesco")]
public string parentesco { get; set; }

它们不是xml属性,而是元素.您可以将其替换为:

public string sexo { get; set; }
public int edad { get; set; }
public string parentesco { get; set; }

(默认行为是为此属性命名的元素)

标签:deserialization,xml,c,net
来源: https://codeday.me/bug/20191121/2049699.html