![](/img/trans.png)
[英]How to write XmlType for node names of classes that inherit from a base class using XmlSerializer
[英]Inherit XMLType of base class
我有以下基類使用XmlType屬性修飾
[Serializable]
[XmlType("Base")]
public class Base
{
[XmlElement(ElementName = "IdBase")]
public int IdBase { get; set; }
...
}
以下是Inherited類, 沒有 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被替換而沒有明確強制它)以及如何實現所需的行為?
我實現了所需的行為,只需使用XmlInclude屬性修飾基類,然后使用基類類型的XmlSerializer
[Serializable]
[XmlType("Base")]
[XmlInclude(typeof(InheritedClass1))] //Missing This line!
public class Base
{
[XmlElement(ElementName = "IdBase")]
public int IdBase { get; set; }
...
}
這個答案基於Marc Gravell對以下問題的回答(在我第一次搜索時,我無法找到這個與我的基本相同的問題)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.