2014-09-30 8 views
3

У меня есть следующий базовый класс украшен атрибут XmlTypeНаследование XMLType базового класса

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

И следующий унаследованный класс, без класса XMLType атрибутого объявления декорирования

[Serializable] 
public class InheritedClass1 : Base 
{ 
    [XmlElement(ElementName = "InheritedProp")] 
    public int InheritedProp{ get; set; } 
    ... 
} 

Когда я сериализация , унаследованный класс, по-видимому, переопределяет XmlType, генерируя следующий XML (чего я не ожидал, потому что я явно не украсил XmlType)

<InheirtedClass1> 
    <IdBase>1</IdBase> 
    <InheritedProp>1</InheritedProp> 
    ... 
</InheirtedClass1> 

That's в XML я ожидал

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

Если я пытаюсь украсить унаследованный класс с [XmlType («Base»)] атрибута, но исключение, когда я создаю экземпляр 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; } 
    ... 
} 

Этот ответ основан на Marc Gravell's ответить на следующий вопрос (на моем первом поиске, я не смог найти этот вопрос, который basiclly тот же мой)

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

Смежные вопросы