2014-11-05 82 views
2

大家好!C#标准XmlSerializer和继承

我有一个来自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; } 
} 

我需要序列d类下一个XML文档中:下一个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> 

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

+0

您确定它使用''和''? – 2014-11-05 11:59:39

+0

是的,我可以提供额外的代码,它与串行器一起工作,你可以在自己的环境中尝试它 – magmel 2014-11-05 12:17:45

+0

Nevermind,我很困惑它与WCF串行器。这将把所有的B和C变成'' – 2014-11-05 12:37:46

回答