Hen*_*nda 9 c# xml-serialization
我有几个具有不同根元素的XML文件,但是相同类型的子元素,我希望能够创建一个单独的类来保存不同的根元素,而另一个类来保存每个子元素.以下是XML文件外观的两个示例.
档案1:
<?xml version="1.0" encoding="utf-8" ?>
<Sandra>
<Address>
<Street></Street>
<Number></Number>
</Address>
</Sandra>
Run Code Online (Sandbox Code Playgroud)
文件2:
<?xml version="1.0" encoding="utf-8" ?>
<John>
<Address>
<Street></Street>
<Number></Number>
</Address>
</John>
Run Code Online (Sandbox Code Playgroud)
我希望能够使用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; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法阅读它们:
var ser = new XmlSerializer(typeof(Person));
var reader = XmlReader.Create("person1.xml");
var person = (Person)ser.Deserialize(reader);
Run Code Online (Sandbox Code Playgroud)
但我得到了"There is an error in XML document (2, 2).",因为解串器是期望<"Person">根元素而不是<"John">或<"Paul">.如果我改变它的工作正常[XmlRoot],[XmlRoot("John")]但这正是我在这里要避免的.
此外,我必须能够使用相同的奇怪XML结构将其序列化,因此我需要将根元素名称存储在Person类中.
我知道我可以简单地创建自己的(de)序列化器,但我想知道是否可以使用现有方法实现它.
编辑1 :(回滚).
编辑2:回滚"编辑1"的修改,因为我找到了一种更简单的方法来实现我所需要的.请参阅下面的答案.
找到了解决我问题的简洁快捷的方法!我只需在实例化XmlSerializer时使用XmlRootAttribute.这样我就可以在运行时设置根元素的名称.
var personsName = "Sandra";
var ser = new XmlSerializer(typeof(Person),
new XmlRootAttribute { ElementName = personsName });
var reader = XmlReader.Create("person1.xml");
var person = (Person)ser.Deserialize(reader);
Run Code Online (Sandbox Code Playgroud)
当然,如果我想序列化它也会以相同的方式工作.
| 归档时间: |
|
| 查看次数: |
8495 次 |
| 最近记录: |