如何让 XmlRoot 拥有对象集合?

2024-04-12

我试图弄清楚如何将以下类序列化为 XML(具体方式见下文):

[XmlRoot("Farm")]
public class Farm
{
    [XmlArray]
    [XmlArrayItem("Person", typeof(Person))]
    [XmlArrayItem("Dog", typeof(Dog))]
    public List<Animal> Animals { get; set; }
}

(假使,假设Dog and Person两者都源自Animal,并且他们都有一个Name装饰有的财产[XmlAttribute("Name")].)

我需要能够创建这个对象:

var myFarm = new Farm
{
    Animals = new List<Animal> { 
        new Person { Name = "Bob" },  
        new Dog { Name = "Fido" }
    }
};

...并将其序列化为以下文档:

<?xml version="1.0"?>
<Farm>
    <Person Name="Bob"/>
    <Dog Name="Fido"/>
</Farm>

但是,当我连载时myFarm(结果输出到控制台)如下所示:

var serializer = new XmlSerializer(typeof(Farm));
var namespaces = new XmlSerializerNamespaces();
namespaces.Add("", "");
serializer.Serialize(System.Console.Out, myFarm, namespaces);

...结果是这样的:

<?xml version="1.0"?>
<Farm>
    <Animals>
        <Person Name="Bob"/>
        <Dog Name="Fido"/>
    </Animals>
</Farm>

注意额外不需要的Animals元素。我该如何摆脱这个?更改 XML 架构不是一个选项,但更改代码可以。我真的很想能够解决这个问题,并希望有人知道一个简单的解决方案(或者知道没有一个简单的解决方案)。

Thanks!


请改用以下属性:

[XmlRoot("Farm")]
public class Farm
{
    [XmlElement("Person", typeof(Person))]
    [XmlElement("Dog", typeof(Dog))]
    public List<Animal> Items { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 XmlRoot 拥有对象集合? 的相关文章

随机推荐