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));

由于某种原因,我一直试图找出我一直得到零对象(和空名)在我的部分类。现在我被困住了,有人有什么建议吗?

c#中XML列表对象的反序列化

对于List<T>成员,您必须将其标记为例如:

[XmlArray(ElementName = "parts")]
[XmlArrayItem(ElementName = "part")]
public List<Part> parts { get; set; }

:

[XmlElement(ElementName = "parts")]

更改所有List<T>成员,然后它应该工作良好