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