XML序列化上令人讨厌的对象

时间:2017-08-15 18:51:43

标签: c# xml xml-serialization

嘿,我正在尝试从xml响应中反序列化一个讨厌的对象,一切正常我的数组列表返回正常,但是里面的所有对象都是null。我将发布带注释和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

2 个答案:

答案 0 :(得分:0)

我认为你在这里遇到了一些问题。首先,您在XML中获得CDATA,这将被解释为文本而不是XML,因此您需要删除CDATA标记或将dados类设置为仅包含text&amp;提取文本然后直接从中构建xml。

一旦你理顺了,看起来爸爸里面的信息实际上并不是任何形式的数组。您应该只能将这些positionData属性直接添加到dados类。如果你想要它们在一个单独的类中,你的xml必须看起来像

<dados>
 <positionData>
  <placa></placa>
  ...
  <Latitude></Latitude>
 </positionData>
</dados>

另外,如果你这样做,你需要将xmlroot和serializable属性添加到positiondata的类定义以及将xmlarrayitem属性添加到dados上的positiondata成员。

答案 1 :(得分:0)

问题修复,答案很简单,只需将对象的注释更改为[XmlElement(&#34; NameOfProprietiesOnXML&#34;)]