Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#标准XmlSerializer和继承_C#_Xml - Fatal编程技术网

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]

大家好

我对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; }
}
[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变成