Я пытаюсь сериализовать (прочитать) XML в мой проект. Я не могу изменить этот XML, потому что он создан не мной. Я постараюсь максимально упростить это.
Я хотел бы прочитать массив с несколькими типами в нем. Это не проблема, если элементы находятся внутри тега [XmlArray ("")].
Один из типов может содержать дополнительные массивы с такими же типами
Например:
Xml
<node Name="testbase">
<items>
<node Name="test1"/>
<items>
<node Name="test2"/>
<node Name="test3"/>
</items>
<othernode Name="test4"/>
</items>
</node>
C #
public class Base
{
[XmlAttribute("Name")]
public string Name { get; set; }
}
public class Node : Base
{
[XmlArray("items")]
[XmlArrayItem("node", typeof(Node))]
[XmlArrayItem("othernode", typeof(Othernode))]
public Base[] nodes { get; set; }
}
public class Othernode : Base
{
}
К сожалению, у меня есть что-то вроде этого:
<node Name="testbase">
<node Name="test1">
<node Name="test2"/>
<node Name="test3"/>
</node>
<othernode Name="test4"/>
</node>
Элементы массива "отсутствуют". Обычно я просто использую тег [XmlElemtn ("")] для подобных вещей.
[XmlElement("node")]
public List<Node> Nodes { get; set; }
Но больше невозможно использовать тег XmlArrayItem для разных типов. Обходной путь - просто использовать несколько списков / массивов, например:
public class Vendor : CreateBase
{
[XmlElement("node")]
public List<Node> Nodes { get; set; }
[XmlElement("othernode")]
public List<Othernode> Othernodes { get; set; }
}
Но я бы хотел, чтобы все было в одном списке / массиве. Возможно ли это каким-либо образом, если вы используете этот вид сериализации XML?
Есть ли способ работы с шаблонами?
С уважением