gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:29:59 25 4
gpt4 key购买 nike

我正在尝试将 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 中的列表总是为空。

 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(这会导致列表内容直接放在父项下)。

其实,你可以节俭一点; 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; }

(默认行为是一个以属性命名的元素)

关于c# - 使用 List<> 将 Xml 字符串反序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com