我有几个具有不同根元素但子元素类型相同的 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);
但我明白"There is an error in XML document (2, 2)."
了,因为反序列化程序需要一个<"Person">
根元素而不是一个<"John">
or <"Paul">
。如果我更改[XmlRoot]
为它工作正常,[XmlRoot("John")]
但这正是我在这里试图避免的。
此外,我必须能够使用相同的奇怪 XML 结构将其序列化,因此我需要将根元素名称存储在 Person 类中。
我知道我可以简单地创建自己的(反)序列化器,但我想知道是否可以使用现有方法来实现它。
编辑1:(回滚)。
编辑 2:回滚“编辑 1”的修改,因为我找到了一种更简单的方法来实现我所需要的。请看下面我的回答。