【发布时间】:2017-01-16 21:04:57
【问题描述】:
我想序列化一个包含DerivedClassA 和DerivedClassB 的List<AbstractClass>,其中这两个类都派生自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 或 DerivedClassB,具体取决于类型。
【问题讨论】:
标签: c# xml serialization