我有以下用XmlType属性
修饰的基类[Serializable]
[XmlType("Base")]
public class Base
{
[XmlElement(ElementName = "IdBase")]
public int IdBase { get; set; }
...
}
以下继承类没有 XMLType attibute装饰类
[Serializable]
public class InheritedClass1 : Base
{
[XmlElement(ElementName = "InheritedProp")]
public int InheritedProp{ get; set; }
...
}
当我序列化时,继承的类似乎覆盖生成以下XML的XmlType(我没想到,因为我没有使用XmlType显式修饰)
<InheirtedClass1>
<IdBase>1</IdBase>
<InheritedProp>1</InheritedProp>
...
</InheirtedClass1>
这就是我期望的XML
<Base>
<IdBase>1</IdBase>
<InheritedProp>1</InheritedProp>
...
</Base>
如果我尝试使用[XmlType(“Base”)]属性装饰继承的类,但是当我创建XmlSerializer的实例(typeof(InheirtedClass1))时会抛出异常,因为它复制了XmlType,这很有意义...
有人可以解释为什么会发生这种情况(在没有明确强制的情况下更换XmlType)以及如何实现所需的行为?
答案 0 :(得分:4)
我实现了所需的行为,只需使用XmlInclude属性修饰基类,然后使用基类类型的XmlSerializer
[Serializable]
[XmlType("Base")]
[XmlInclude(typeof(InheritedClass1))] //Missing This line!
public class Base
{
[XmlElement(ElementName = "IdBase")]
public int IdBase { get; set; }
...
}
这个答案基于Marc Gravell对以下问题的回答(在我第一次搜索时,我无法找到这个与我的基本相同的问题)