Десериализация объектов списка XML в C #

1

Я пытаюсь десериализовать 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));

По какой-то причине, которую я пытался выяснить, я продолжаю получать нулевые объекты (и нулевое имя) в своем классе part. Прямо сейчас я застрял, кто-нибудь, кто имеет вход?

Теги:
serialization

1 ответ

4
Лучший ответ

Для участников List<T> вы должны пометить их, например:

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

Не:

[XmlElement(ElementName = "parts")]

Измените для всех участников List<T> тогда он должен работать нормально.

  • 0
    Спасибо, вот и все!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню