C#标准XmlSerializer和继承

本文关键字:继承 XmlSerializer 标准 | 更新日期: 2023-09-27 18:29:09

大家好!

我对C#中的标准XmlSerializer有问题。在我的项目中,我有下一个类层次结构:

[XmlInclude(typeof(B))]
[XmlInclude(typeof(C))]
abstract class A { }
[XmlType("btag")]
class B : A {
    [XmlText]
    public String Value { get; set; }
}
[XmlType("ctag")]
class C : A {
    [XmlText]
    public String Value { get; set; }
}
[XmlRoot(ElementName="dtag")]
class D {
    [XmlArrayItem(typeof(A))]
    public List<A> Items { get; set; }
}

我需要在下一个XML文档中序列化类D:

<dtag>
    <ctag>val1</ctag>
    <btag>val2</btag>
    <ctag>val3</ctag>
</dtag>

但是序列化程序在下一个XML文档中序列化D类的对象:

<dtag>
    <Items>
         <C d3p1:type="ctag">val1</C>
         <B d3p1:type="btag">val2</B>
         <C d3p1:type="ctag">val3</C>
    </Items>
</d>

所有类名和实现的其他细节都被省略了,我无法更改这个类层次结构。我只能在上面的类中更改属性并添加一些字段。现在我的问题是,如何在输出XML中省略标记Items,并使元素名称为ctag和btag?

C#标准XmlSerializer和继承

问题已解决。

[XmlRoot(ElementName="dtag")]
class D {
    [XmlElement("btag", Type = typeof(B))]
    [XmlElement("ctag", Type = typeof(C))]
    public List<A> Items { get; set; }
}