下面的基类使用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; }
...
}当我序列化时,继承的类似乎覆盖了生成以下XmlType的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可以被替换,而不需要解释),我如何才能达到预期的行为呢?
发布于 2014-10-14 20:58:32
我实现了所需的行为,只需使用XmlInclude属性装饰基类,并使用基类类型的XmlSerializer
[Serializable]
[XmlType("Base")]
[XmlInclude(typeof(InheritedClass1))] //Missing This line!
public class Base
{
[XmlElement(ElementName = "IdBase")]
public int IdBase { get; set; }
...
}这个答案是基于Marc对以下问题的回答(在我第一次搜索时,我找不到这个问题,这个问题与我的基本相同)。
https://stackoverflow.com/questions/26128732
复制相似问题