c#中XML列表对象的反序列化
本文关键字:反序列化 对象 列表 XML | 更新日期: 2023-09-27 18:04:06
我正在尝试用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));
由于某种原因,我一直试图找出我一直得到零对象(和空名)在我的部分类。现在我被困住了,有人有什么建议吗?
对于List<T>
成员,您必须将其标记为例如:
[XmlArray(ElementName = "parts")]
[XmlArrayItem(ElementName = "part")]
public List<Part> parts { get; set; }
:
[XmlElement(ElementName = "parts")]
更改所有List<T>
成员,然后它应该工作良好