大家好!
我对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?
问题已解决。
[XmlRoot(ElementName="dtag")]
class D {
[XmlElement("btag", Type = typeof(B))]
[XmlElement("ctag", Type = typeof(C))]
public List<A> Items { get; set; }
}