我有一个具有抽象'aninamls'列表的对象。即。
var animals = new Animals
{
new Bird{ TailFeatherColour = "Blue" },
new Cat{ Colour = "Brown" }
};
使用xmlserializer,可以将上面的序列化为以下xml,
<?xml version="1.0" encoding="utf-16"?>
<Animals>
<Bird>
<TailFeatherColour>Blue</TailFeatherColour>
</Bird>
<Cat>
<Colour>Brown</Colour>
</Cat>
</Animals>
目前,我只能得到以下内容:
<?xml version="1.0" encoding="utf-16"?>
<Animals>
<Animal xsi:type="Bird">
<TailFeatherColour>Blue</TailFeatherColour>
</Animal>
<Animal xsi:type="Cat">
<Colour>Brown</Colour>
</Animal>
</Animals>
答案 0 :(得分:1)
当列表是另一个类中的字段时,可以使用XmlElementAttribute
和XmlArrayItemAttribute
属性来执行此操作(不同之处在于前者不会在列表元素周围放置容器元素,而后者确实)。
我不相信你只需要一个列表即可实现你想要的东西,即当被序列化的实际对象是一个列表时(虽然我可能在这里错了)但是你可以通过在类中嵌套一个列表来伪造它,例如
[XmlRoot("Animals")]
[XmlType("Animals")]
public class AnimalsWrapper
{
[XmlElement(typeof(Bird), ElementName = "Bird")]
[XmlElement(typeof(Cat), ElementName = "Cat")]
public List<Animal> Animals;
}
这是一个笨拙的黑客攻击,但会序列化到您正在寻找的内容。