我正在试图弄清楚如何将以下类序列化为XML(以特定方式,见下文):
[XmlRoot("Farm")]
public class Farm
{
[XmlArray]
[XmlArrayItem("Person", typeof(Person))]
[XmlArrayItem("Dog", typeof(Dog))]
public List<Animal> Animals { get; set; }
}
(假设Dog
和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>
请注意额外不需要的动物元素。我怎么摆脱这个?更改XML模式不是一种选择,但更改代码是。我真的只是希望能够解决这个问题,并希望有人知道一个简单的解决方案(或者知道一个事实,即没有一个简单的解决方案)。
谢谢!
答案 0 :(得分:2)
请改用以下属性:
[XmlRoot("Farm")]
public class Farm
{
[XmlElement("Person", typeof(Person))]
[XmlElement("Dog", typeof(Dog))]
public List<Animal> Items { get; set; }
}