私のシナリオ:
XmlElement タグで装飾されたプロパティで定義したオブジェクトと、定義した型を持つオブジェクトがあります。そのうちのいくつかは、それぞれの派生型に設定される抽象型として型指定されています。XmlSerializer を使用してこのオブジェクト全体を XML にシリアル化したいのですが、抽象型のすべてのプロパティは、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>
ここで私が間違っている手がかりはありますか?