XML 上的讨厌对象序列化
Nasty Object on XML Serialize
嘿,我正在尝试从 xml 响应中反序列化一个讨厌的对象,一切正常我的数组列表返回正常,但里面的所有对象都是 null.I 将 post带有注释的 类 和 xml,但如果我更改注释,反序列化将不起作用。
[Serializable, XmlRoot(ElementName = "DocumentElement", Namespace = "")]
public class dados {
[XmlElement(ElementName = "dados", Namespace = "")]
public positionData[] Position ;
}
public class positionData {
[XmlText]
public string Placa { get; set; }
[XmlAttribute("Latitude")]
public double Latitude { get; set; }
[XmlAttribute("Longitude")]
public double Longitude { get; set; }
[XmlAttribute("dataini")]
public DateTime dataini { get; set; }
[XmlAttribute("datafim")]
public DateTime datafim { get; set; }
[XmlAttribute("tipo")]
public string tipo { get; set; }
[XmlAttribute("idpontoreferencia")]
public long idpontoreferencia { get; set; }
[XmlAttribute("nome")]
public string nome { get; set; }
[XmlAttribute("Data")]
public DateTime Data { get; set; }
}
XML
<DocumentElement xmlns="">
<dados>
<![CDATA[<Placa>LLV6386 </Placa><Latitude>-22,91572</Latitude><Longitude>-43,09471</Longitude><dataini>15/08/2017 11:12:35</dataini><datafim></datafim><tipo>P</tipo><idpontoreferencia>76749</idpontoreferencia><nome></nome><Data>15/08/2017 11:12:36</Data>]]>
</dados>
错误The erros
我认为你这里有一些问题。首先,您在 XML 中获得了 CDATA,这将被解释为文本,而不是 XML,因此您需要删除 CDATA 标签或将 dados class 设置为包含文本并提取文本,然后直接从中构建 xml。
理顺之后,dados里面的信息看起来并不是什么数组。您应该能够将这些 positionData 属性直接添加到 dados class。如果您希望它们在单独的 class 中,您的 xml 必须看起来像
<dados>
<positionData>
<placa></placa>
...
<Latitude></Latitude>
</positionData>
</dados>
此外,如果您这样做,您需要将 xmlroot 和可序列化属性添加到 positiondata 的 class 定义中,并将 xmlarrayitem 属性添加到 dados 上的 positiondata 成员中.
问题修复,答案很简单,只需将对象的注释更改为[XmlElement("NameOfProprietiesOnXML")]
嘿,我正在尝试从 xml 响应中反序列化一个讨厌的对象,一切正常我的数组列表返回正常,但里面的所有对象都是 null.I 将 post带有注释的 类 和 xml,但如果我更改注释,反序列化将不起作用。
[Serializable, XmlRoot(ElementName = "DocumentElement", Namespace = "")]
public class dados {
[XmlElement(ElementName = "dados", Namespace = "")]
public positionData[] Position ;
}
public class positionData {
[XmlText]
public string Placa { get; set; }
[XmlAttribute("Latitude")]
public double Latitude { get; set; }
[XmlAttribute("Longitude")]
public double Longitude { get; set; }
[XmlAttribute("dataini")]
public DateTime dataini { get; set; }
[XmlAttribute("datafim")]
public DateTime datafim { get; set; }
[XmlAttribute("tipo")]
public string tipo { get; set; }
[XmlAttribute("idpontoreferencia")]
public long idpontoreferencia { get; set; }
[XmlAttribute("nome")]
public string nome { get; set; }
[XmlAttribute("Data")]
public DateTime Data { get; set; }
}
XML
<DocumentElement xmlns="">
<dados>
<![CDATA[<Placa>LLV6386 </Placa><Latitude>-22,91572</Latitude><Longitude>-43,09471</Longitude><dataini>15/08/2017 11:12:35</dataini><datafim></datafim><tipo>P</tipo><idpontoreferencia>76749</idpontoreferencia><nome></nome><Data>15/08/2017 11:12:36</Data>]]>
</dados>
错误The erros
我认为你这里有一些问题。首先,您在 XML 中获得了 CDATA,这将被解释为文本,而不是 XML,因此您需要删除 CDATA 标签或将 dados class 设置为包含文本并提取文本,然后直接从中构建 xml。
理顺之后,dados里面的信息看起来并不是什么数组。您应该能够将这些 positionData 属性直接添加到 dados class。如果您希望它们在单独的 class 中,您的 xml 必须看起来像
<dados>
<positionData>
<placa></placa>
...
<Latitude></Latitude>
</positionData>
</dados>
此外,如果您这样做,您需要将 xmlroot 和可序列化属性添加到 positiondata 的 class 定义中,并将 xmlarrayitem 属性添加到 dados 上的 positiondata 成员中.
问题修复,答案很简单,只需将对象的注释更改为[XmlElement("NameOfProprietiesOnXML")]