我试图将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; }
}
}
答案 0 :(得分:3)
你想:
[XmlArray("Riesgo")]
[XmlArrayItem("asegurado", Type = typeof (Asegurado))]
不是XmlElementAttribute
(这导致列表内容直接放在 的父母下面。)
实际上,如果你愿意,你可以更节俭;隐含Type
(来自列表),如果需要,可以省略。
另请注意,这些都是错误的:
[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; }
(默认行为是为属性命名的元素)