У меня есть массив элементов, которые мне нужно сериализовать с помощью XmlSerializer. Проблема, с которой я сталкиваюсь, состоит в том, что у меня есть 2 производных класса и их сериализация, поэтому они имеют имя элемента общей базы, похоже, не работают.XML-сериализация производных классов
Итак, это то, как XML должен выглядеть:
<Root>
<Base> foo </Base>
</Root>
Вместо этого, я получаю
<Root>
<Derived1> foo </Derived1>
</Root>
Код для массива элементов я сериализации является
private object[] m_nodes;
[System.Xml.Serialization.XmlElementAttribute("Base", typeof(Derived1)]
[System.Xml.Serialization.XmlElementAttribute("Base", typeof(Derived2)]
public object[] Nodes
{
get
{
return this.m_nodes;
}
set
{
this.m_nodes = value;
}
}
С приведенным выше кодом, я понимаю, что есть ошибка отражения с узлами. Если я изменю «Base» в обоих XmlEelementAttributes к «Derived1» и Derived2" , она работает, но имя элемента является неправильным.
[System.Xml.Serialization.XmlInclude(typeof(Derived1))]
public abstract class Base
{
public Base()
{
}
}
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public class Derived1: Base
{
public Derived1()
{
}
}
Любая помощь очень ценится. Спасибо так много.
Спасибо. Ответы твои и Давида теперь имеют смысл, и я смотрю на это с точки зрения необходимости и десериализации.Я думаю, что я предположил, что существует какой-то способ указать, что, поскольку некоторый атрибут = «Derived1» в XML, я мог бы вручную указать, какой объект создать. – mfanto