首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承基类的XMLType

继承基类的XMLType
EN

Stack Overflow用户
提问于 2014-09-30 19:37:37
回答 1查看 2K关注 0票数 3

下面的基类使用XmlType属性修饰

代码语言:javascript
复制
[Serializable]
[XmlType("Base")]
public class Base
{
    [XmlElement(ElementName = "IdBase")]
    public int IdBase { get; set; }
    ...
}

和下面的继承类,(不含)-- XMLType attibute装饰类

代码语言:javascript
复制
[Serializable]
public class InheritedClass1 : Base
{
    [XmlElement(ElementName = "InheritedProp")]
    public int InheritedProp{ get; set; }
    ...
}

当我序列化时,继承的类似乎覆盖了生成以下XmlType的XmlType(我没有预料到这一点,因为我没有显式地使用XmlType进行修饰)

代码语言:javascript
复制
<InheirtedClass1>
    <IdBase>1</IdBase>
    <InheritedProp>1</InheritedProp>
    ...
</InheirtedClass1>

这就是我所期望的XML。

代码语言:javascript
复制
<Base>
    <IdBase>1</IdBase>
    <InheritedProp>1</InheritedProp>
    ...
</Base>

如果我尝试用XmlType("Base")属性修饰继承的类,但是当我创建XmlSerializer的实例(typeof(InheirtedClass1))时会抛出一个异常,因为它复制了XmlType,这很有道理.

有人能解释一下为什么会发生这种情况吗( XmlType可以被替换,而不需要解释),我如何才能达到预期的行为呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-14 20:58:32

我实现了所需的行为,只需使用XmlInclude属性装饰基类,并使用基类类型的XmlSerializer

代码语言:javascript
复制
[Serializable]
[XmlType("Base")]
[XmlInclude(typeof(InheritedClass1))] //Missing This line! 
public class Base
{
     [XmlElement(ElementName = "IdBase")]
     public int IdBase { get; set; }
     ...
}

这个答案是基于Marc对以下问题的回答(在我第一次搜索时,我找不到这个问题,这个问题与我的基本相同)。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26128732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档