【问题标题】:XmlSerialization of mutiple object types in the one list一个列表中多个对象类型的Xml序列化
【发布时间】:2009-01-19 00:36:14
【问题描述】:

我有一个包含抽象“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>

【问题讨论】:

    标签: c# serialization xml-serialization


    【解决方案1】:

    XmlElementAttributeXmlArrayItemAttribute 属性可用于在列表是另一个类中的字段时执行此操作(不同之处在于前者不会在列表元素周围放置容器元素,而后者有) .

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2020-11-17
      相关资源
      最近更新 更多