C # Xml десериализация - сохранение дочернего порядка - PullRequest
3 голосов
/ 09 марта 2011

У меня есть XML, который выглядит примерно так (упрощенный пример):

<childrenNode>
   <myClass1>
      <someValues />
   </myClass1>
   <myClass2>
      <someOtherValues />
   </myClass2>
   <myClass1>
      <someValues />
   </myClass1>
   <myClass2>
      <someOtherValues />
   </myClass2>
   <myClass1>
      <someValues />
   </myClass1>
</childrenNode>

При анализе я использую класс, который выглядит примерно так:

public class childrenNode
{
   public myClass1[] myClass1 { get; set; }
   public myClass2[] myClass2 { get; set; }
}
* 1006Проблема в том, что я теряю порядок.Т.е. мне нужно знать, что второй myClass1 является третьим элементом массива.В идеале я бы сериализовал Xml во что-то подобное, чтобы сохранить порядок:
public class childrenNode
{
   public object[] child { get; set; }
}

Xml выводится сторонним приложением, поэтому у меня нет шансов изменить его макет.*

Любые предложения о том, какие у меня есть альтернативы?Xml на самом деле массивны, поэтому их анализ с использованием XmlReader будет большой работой.

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Вы можете сопоставить узлы с XmlElementAttribute msdn

public class childrenNode
{
   [XmlElement("myClass1", typeof(myClass1))]
   [XmlElement("myClass2", typeof(myClass2))]
   public BaseNode[] nodes { get; set; }
}

public class BaseNode
{

}

public class myClass1: BaseNode
{
}

public class myClass2: BaseNode
{
}
0 голосов
/ 09 марта 2011

Пользовательская сериализация для дочернего узла

http://msdn.microsoft.com/en-us/library/ty01x675(v=vs.80).aspx

...