2

我有一个包含抽象“aninamls”列表的对象。IE

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>
4

1 回答 1

1

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

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

[XmlRoot("Animals")]
[XmlType("Animals")]
public class AnimalsWrapper
{
    [XmlElement(typeof(Bird), ElementName = "Bird")]
    [XmlElement(typeof(Cat), ElementName = "Cat")]
    public List<Animal> Animals;
}

这有点笨拙,但会序列化为您要查找的内容。

于 2009-01-19T00:47:41.567 回答