2014-09-30 30 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