2
我想弄清楚如何序列下面的类转换为XML(以特殊的方式,见下文):如何让XmlRoot获得对象集合?
[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模式不是一种选择,但更改代码是。我真的想能够解决这个问题,并希望有人知道一个简单的修复(或知道一个事实,有一个简单的修复)。
谢谢!
就像一个魅力,谢谢! – 2011-03-30 21:52:57