继承基类的XMLType

时间:2014-09-30 19:37:37

标签: c# xml inheritance serialization

我有以下用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)以及如何实现所需的行为?

1 个答案:

答案 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对以下问题的回答(在我第一次搜索时,我无法找到这个与我的基本相同的问题)

https://stackoverflow.com/a/12237360/2237027