Мой сценарий:
У меня есть объект, который я определил со свойствами, которые украшены тегами XmlElement и имеют типы, которые я определил, некоторые из которых набраны как абстрактные, для которых устанавливаются соответствующие производные типы. Я хочу сериализовать весь этот объект в XML с помощью XmlSerializer, и все абстрактные свойства должны сериализоваться как элементы с TypeName, для которого задано TypeName производного типа.
Это пример того, как структурированы объекты:
[XmlType(TypeName = "MAINOBJECT")]
public class MainObject
{
[XmlElement(Type = typeof(DerivedClass))]
public BaseClass TheBase { get; set; }
}
[XmlInclude(typeof(DerivedClass))]
public abstract class BaseClass
{
[XmlAttribute("AnAttribute")]
public string AnAttribute { get; set; }
[XmlElement("ANELEMENT")]
public string AnElement { get; set; }
}
[XmlType(TypeName = "DERIVEDCLASS")]
public class DerivedClass : BaseClass
{
[XmlElement("ANOTHERELEMENT")]
public string AnotherElement { get; set; }
}
Однако обратите внимание, что когда я создаю новый экземпляр MainObject, заполняю его свойства и сериализую его, сгенерированный XML выглядит следующим образом:
<MAINOBJECT>
<BaseClass AnAttribute="">
<ANELEMENT/>
<ANOTHERELEMENT/>
</BaseClass>
</MAINOBJECT>
Я хочу вот что:
<MAINOBJECT>
<DERIVEDCLASS AnAttribute="">
<ANELEMENT/>
<ANOTHERELEMENT/>
</DERIVEDCLASS>
</MAINOBJECT>
Есть какие-нибудь подсказки, что я здесь делаю не так?