我有几个不同根元素但具有相同子元素类型的XML文件,我希望能够创建一个单一的类来保存不同的根元素,并创建另一个用于存储每个子元素的类。 以下是两个XML文件的示例。
文件1:
<?xml version="1.0" encoding="utf-8" ?>
<Sandra>
<Address>
<Street></Street>
<Number></Number>
</Address>
</Sandra>
文件2:
<?xml version="1.0" encoding="utf-8" ?>
<John>
<Address>
<Street></Street>
<Number></Number>
</Address>
</John>
我希望只使用2个类就能够序列化和反序列化它,就像这样:
[Serializable]
[XmlRoot]
public class Person
{
[XmlElement("Address")]
public List<Address> Adresses { get; set; }
}
[Serializable]
public class Address
{
public string Street { get; set; }
public string Number { get; set; }
}
我尝试使用以下方式读取它们:
var ser = new XmlSerializer(typeof(Person));
var reader = XmlReader.Create("person1.xml");
var person = (Person)ser.Deserialize(reader);
但我得到了“XML文档(2,2)中有一个错误”的提示,因为反序列化器期望一个根元素而不是或。如果我将[XmlRoot]更改为[XmlRoot(“John”)],则可以正常工作,但这正是我想要避免的。另外,我必须能够使用相同的奇怪XML结构将其序列化回来,所以我需要在Person类中存储根元素名称。
我知道我可以简单地创建自己的(反)序列化器,但我想知道是否可以使用现有的方法实现它。
编辑1:(已回滚)。
编辑2:回滚“编辑1”的修改,因为我找到了一种更简单的方法来实现我所需的功能。请参见下面的答案。