C# 一个列表中多个对象类型的XmlSerialization

C# 一个列表中多个对象类型的XmlSerialization,c#,serialization,xml-serialization,C#,Serialization,Xml Serialization,我有一个对象,它有一个抽象的“aninamls”列表。i、 e var animals = new Animals { new Bird{ TailFeatherColour = "Blue" }, new Cat{ Colour = "Brown" } }; 使用xmlserializer,是否可以将上述内容序列化为以下xml <?xml version="1.0" encoding="utf-16"?> <Animals> <Bird>

我有一个对象,它有一个抽象的“aninamls”列表。i、 e

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>

蓝色
棕色的
当列表是另一个类中的字段时,可以使用和属性来执行此操作(区别在于前者不在列表元素周围放置容器元素,而后者则在列表元素周围放置容器元素)

我不相信仅仅用一个列表就可以实现你想要的,也就是说,当被序列化的实际对象是一个列表时(虽然我在这里可能错了),但是你可以通过在类中嵌套一个列表来伪造它,例如

[XmlRoot("Animals")]
[XmlType("Animals")]
public class AnimalsWrapper
{
    [XmlElement(typeof(Bird), ElementName = "Bird")]
    [XmlElement(typeof(Cat), ElementName = "Cat")]
    public List<Animal> Animals;
}
[XmlRoot(“动物”)]
[XmlType(“动物”)]
公共类动物包装器
{
[xmlement(typeof(Bird),ElementName=“Bird”)]
[xmlement(typeof(Cat),ElementName=“Cat”)]
公布动物名单;
}
这是一个有点笨重的黑客,但将序列化到您正在寻找的内容