我正在尝试反序列化c#中的xml,看起来像这样(缩短版本):
<?xml version="1.0" encoding="UTF-8"?>
<map>
<parts>
<part name="default part">
<objects count="1597">
<object type="1" symbol="6">
<coords count="130">
<coord x="-221595" y="-109687" flags="1"/>
<coord x="-221625" y="-109744"/>
<coord x="-221640" y="-109785"/>
<coord x="-221640" y="-109841" flags="1"/>
<coord x="-221655" y="-109969"/>
<coord x="-221655" y="-110040"/>
<coord x="-221640" y="-110164" flags="1"/>
<coord x="-221640" y="-110209"/>
<coord x="-221655" y="-110265"/>
</coords>
<pattern rotation="0">
<coord x="0" y="0"/>
</pattern>
</object>
</objects>
</part>
</parts>
</map>
使用以下课程:
[XmlRoot("map")]
public class Map {
[XmlElement(ElementName = "parts")]
public List<Part> parts { get; set; }
public Map()
{
parts = new List<Part>();
}
public class Part {
[XmlElement(ElementName = "objects")]
public List<KdToPostGISProject.Object> objects { get; set; }
public Part()
{
objects = new List<KdToPostGISProject.Object>();
}
[XmlAttribute(AttributeName = "name")]
public String name { get; set; }
}
public class Object
{
[XmlElement(ElementName = "coords")]
public List<Coord> coords { get; set; }
public Object()
{
coords = new List<Coord>();
}
}
public class Coord
{
[XmlAttribute]
public int x { get; set; }
[XmlAttribute]
public int y { get; set; }
}
主要功能:
var serializer = new XmlSerializer(typeof(Map), new XmlRootAttribute("map"));
Map resultingMessage = (Map)serializer.Deserialize(new FileStream(@"myXml.xml", FileMode.Open));
出于某种原因,我一直试图弄清楚我在我的部分类中不断获得零对象(和空名称)。现在我被困了,任何有任何投入的人?
答案 0 :(得分:5)
对于List<T>
成员,您必须将其标记为例如:
[XmlArray(ElementName = "parts")]
[XmlArrayItem(ElementName = "part")]
public List<Part> parts { get; set; }
不
[XmlElement(ElementName = "parts")]
更改所有List<T>
成员,然后它应该可以正常工作。