2014-09-30 81 views
3

我有以下的基类进XML属性继承的XMLType

[Serializable] 
[XmlType("Base")] 
public class Base 
{ 
    [XmlElement(ElementName = "IdBase")] 
    public int IdBase { get; set; } 
    ... 
} 

而下面的继承类,装饰不进XML 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> 

That's的XML我的预期

<Base> 
    <IdBase>1</IdBase> 
    <InheritedProp>1</InheritedProp> 
    ... 
</Base> 

如果我想装饰用[XmlType将(“基地”)]属性继承的类,但是当我创建的实例抛出一个异常XmlSerializer(typeof(InheirtedClass1)),因为它重复了XmlType,这是有道理的...

有人可以解释为什么会发生这种情况(XmlType被替换而没有明确强制它)以及如何实现所需的行为?

回答

4

我实现所期望的行为,只是装饰与XmlInclude基类属性在以下和使用基类型的XmlSerializer的结束了

[Serializable] 
[XmlType("Base")] 
[XmlInclude(typeof(InheritedClass1))] //Missing This line! 
public class Base 
{ 
    [XmlElement(ElementName = "IdBase")] 
    public int IdBase { get; set; } 
    ... 
} 

此答案是基于马克Gravell's回答下面的问题(在我第一次搜索时,我找不到这个问题,基本上和我的一样)

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