【发布时间】:2010-11-26 12:21:14
【问题描述】:
我有一个 C# 类结构,其中包含一个抽象基类和从这个抽象类派生的各种类。
[System.Xml.Serialization.XmlInclude(typeof(B))]
public abstract class A {
...
}
[Serializable]
[XmlType("typename")]
public class B : A {
...
}
此外,我在另一个 C 类中使用 B 类的实例作为其抽象类型如下的字段:
public class C {
...
public A myItem { get; set; } //A is actually of type B
...
}
现在,当我通过标准 xmlserializer 序列化我的 C 类时,我得到了这样的 XML 结构:
<C>
<myItem p2:type="typename" xmlns:p2="...">
... //Fields as elements and stuff
</myItem>
</C>
但这不是我需要的,因为我将那些序列化的 C 对象发送到 REST Web 服务(还没有有效的模式)。我真正需要的是这样的:
<C>
<typename>
... //Fields as elements and stuff
</typename>
</C>
但正如您在上面看到的,xmlserializer 似乎更喜欢实例字段名称而不是通过 XmlType 设置的类型名称。另外,显然我不能只对 C 中的字段使用 XmlElement("typename"),因为我不知道该字段将包含我的抽象类 A 的哪个具体实现。
有没有人遇到过类似的问题并可以为我提供解决方案?或者我真的需要在我的 A 类中实现 IXmlSerializable 并因此在所有具体的 A 派生类中实现它吗?
编辑:刚刚在阅读一些文章时发现 IXmlSerializable 不允许我控制包装器元素,所以我实际上需要使用某种 switch() 在 C 类中实现接口关于 myItem 成员的类型?
感谢您的帮助!
最好的问候, 浮动
【问题讨论】:
标签: c# xml serialization c#-3.0 xml-serialization