【发布时间】:2014-09-03 17:31:42
【问题描述】:
我的场景:
我有一个对象,我定义了一个用 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>
任何线索我在这里做错了什么?
【问题讨论】:
标签: c# xml-serialization derived-class abstract-base-class