gpt4 book ai didi

c# - 如何让 XmlRoot 拥有对象集合?

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:33 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何将以下类序列化为 XML(以特定方式,见下文):

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

(假设 DogPerson 都派生自 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 模式不是一种选择,但更改代码是一种选择。我真的很想能够解决这个问题,并希望有人知道一个简单的修复方法(或者知道没有一个简单的修复方法)。

谢谢!

最佳答案

改为使用以下属性:

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

关于c# - 如何让 XmlRoot 拥有对象集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5492673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com