Сериализация объектов XML в коллекции на корневом уровне - PullRequest
2 голосов
/ 02 декабря 2011

Попытка десериализации файла XML из стороннего инструмента в пользовательский класс программного обеспечения. Проблема в том, что XML немного глуповат, поскольку «корневой» элемент действительно является объявлением коллекции. Я много сделал с XMLArray и другими определениями для определения сериализации, но это, похоже, не работает. Лучшее, что я смог сделать - это прочитать коллекцию, но ни один из объектов в коллекции не был инициализирован переменными.

Вот пример того, с чем я сталкиваюсь:

XML:

<Animals>
  <Animal>
    <Name>Mr. Cow</Name>
    <Type>Cow</Type>
  </Animal>
  <Animal>
    <Name>Belle</Name>
    <Type>Cow</Type>
  </Animal>
  <Animal>
    <Name>Porky</Name>
    <Type>Pig</Type>
  </Animal>
</Animals>

Затем мой объект XMLRoot определен как «Животные» в моем объекте «Ферма». И есть список свойств для моего класса "Животное". Если я определю это свойство (список AnimalCollection), то лучшее, что я смогу получить, - это список из 3 неинициированных объектов Animal (ни одно из установленных значений).

В офисе лучше всего было бы добавить узел в файл в виде потока, прежде чем пытаться десериализовать его и использовать его в обычном режиме, но, очевидно, это выглядит как ужасный хак. Надеюсь, что есть лучший способ, который я просто скучаю.

Я тоже думал о ручном чтении документа ... но снова надеялся, что есть более элегантный способ.

1 Ответ

3 голосов
/ 02 декабря 2011
XmlSerializer serializer = new XmlSerializer(typeof(Animal[]), new XmlRootAttribute("Animals"));

public class Animal
{
    [XmlElement]
    public string Name;
    [XmlElement]
    public string Type;
}
...