C#标准XmlSerializer和继承
大家好 我对C#中的标准XmlSerializer有问题。在我的项目中,我有下一个类层次结构:C#标准XmlSerializer和继承,c#,xml,C#,Xml,大家好 我对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]
[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; }
}
[xmlclude(typeof(B))]
[xmlclude(typeof(C))]
抽象类A{}
[XmlType(“btag”)]
B类:A{
[XmlText]
公共字符串值{get;set;}
}
[XmlType(“ctag”)]
丙类:甲{
[XmlText]
公共字符串值{get;set;}
}
[XmlRoot(ElementName=“dtag”)]
D类{
[XmlArrayItem(typeof(A))]
公共列表项{get;set;}
}
我需要在下一个XML文档中序列化类D:
<dtag>
<ctag>val1</ctag>
<btag>val2</btag>
<ctag>val3</ctag>
</dtag>
<dtag>
<Items>
<C d3p1:type="ctag">val1</C>
<B d3p1:type="btag">val2</B>
<C d3p1:type="ctag">val3</C>
</Items>
</d>
瓦尔1
瓦尔2
val3
但序列化程序在下一个XML文档中序列化D类的对象:
<dtag>
<ctag>val1</ctag>
<btag>val2</btag>
<ctag>val3</ctag>
</dtag>
<dtag>
<Items>
<C d3p1:type="ctag">val1</C>
<B d3p1:type="btag">val2</B>
<C d3p1:type="ctag">val3</C>
</Items>
</d>
瓦尔1
瓦尔2
val3
所有类名和其他实现细节都被省略了,我无法更改这个类层次结构。我只能更改属性并在上面的类中添加一些字段。现在是我的问题——如何在输出XML中省略标记项并使元素名为ctag和btag?问题已经解决
[XmlRoot(ElementName="dtag")]
class D {
[XmlElement("btag", Type = typeof(B))]
[XmlElement("ctag", Type = typeof(C))]
public List<A> Items { get; set; }
}
[XmlRoot(ElementName=“dtag”)]
D类{
[xmlement(“btag”,Type=typeof(B))]
[XmlElement(“ctag”,Type=typeof(C))]
公共列表项{get;set;}
}
你确定它使用了
和
吗?是的,我可以提供额外的代码段,它与序列化程序一起工作,你可以在自己的环境中尝试。不过,我把它与WCF序列化程序混淆了。这将把所有的B和C变成