gpt4 book ai didi

c# - 继承基类的 XMLType

转载 作者:数据小太阳 更新时间:2023-10-29 02:26:25 25 4
gpt4 key购买 nike

我有以下用 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; }
...
}

当我序列化时,继承的类似乎覆盖了生成以下 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 对以下问题的回答(在我第一次搜索时,我找不到这个与我的问题基本相同的问题)

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

关于c# - 继承基类的 XMLType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26128732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com