C# XML 序列化列表,元素名称取决于类

2024-03-08

我想序列化一个List<AbstractClass>其中包含DerivedClassA and DerivedClassB这两个类都派生自AbstractClass.

此外,我想向包装列表中每个元素的元素添加一个属性。我想要的输出是这样的:

<MyCustomListName foo="bar">
    <DerivedClassA baseAttribute="value" attributeFromA="value"/>
    <DerivedClassB baseAttribute="value" attributeFromB="value"/>
    ...
</MyCustomListName> 

到目前为止我所拥有的是这样的:

public class MyCustomListName
{
   [XmlAttribute]
   public string foo {get; set;}

   [XmlArray]        
   public List<AbstractClass> list { get; set; }

}

[XmlInclude(typeof(DerivedClassA))]
[XmlInclude(typeof(DerivedClassB))]
public abstract class AbstractClass
{
   [XmlAttribute]
   public string baseAttribute {get; set;}
}

public class DerivedClassA : AbstractClass
{
   [XmlAttribute]
   public string attributeFromA {get; set;}
}

public class DerivedClassB : AbstractClass
{
   [XmlAttribute]
   public string attributeFromB {get; set;}
}

使用它,我得到以下输出:

<MyCustomListName foo="bar">
  <list>
    <AbstractClass xsi:type="DerivedClassA" baseAttribute="value" attributeFromA="value"/>
    <AbstractClass xsi:type="DerivedClassB" baseAttribute="value" attributeFromB="value"/>
  </list>
</MyCustomListName>

因此,为了获得我想要的输出,不应该有嵌套<list>元素,而不是xsi:type属性,元素名称应该是DerivedClassA or DerivedClassB取决于类型。


为不同类型的项目提供不同的名称:

[XmlElement("derivedA", typeof(DerivedClassA))]
[XmlElement("derivedB", typeof(DerivedClassB))]
public List<AbstractClass> list { get; set; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# XML 序列化列表,元素名称取决于类 的相关文章

随机推荐