从类序列化XML文档的最佳实践
本文关键字:最佳 文档 序列化 XML | 更新日期: 2023-09-27 18:26:30
我目前的解决方案运行良好。我有一个C#类Person
,我正在使用XmlSerializer
对象将其序列化为XML文档。我知道下面的类结构将被序列化到XML文档中(也在下面)。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
[XmlAttribute("recordId")]
public int recordId { get; set; }
}
将被序列化为以下XML:
<?xml version="1.0" encoding="utf-8"?>
<Person recordId="1">
<FirstName>John</FirstName>
<LastName>Doe</LastName>
<Age>32</Age>
</Person>
假设每个属性都相同。我应该像用XmlAttribute
一样,用XmlElement
标记适当地显式地为每个元素加序吗;还是让Person
类完全可以接受?
这样做或不这样做意味着什么?
[XmlRoot("Person")]
public class Person
{
[XmlElement("FirstName")]
public string FirstName { get; set; }
[XmlElement("LastName")]
public string LastName { get; set; }
[XmlElement("Age")]
public int Age { get; set; }
[XmlAttribute("recordId")]
public int recordId { get; set; }
}
默认情况下,XmlSerializer
使用XML元素名称的属性名称,并且99%的时间都是这样。在边缘情况下,您需要将自定义元素名称映射到属性名称(例如,您从XML创建代码模型,而XML元素以无效字符开头)。
对我来说,明显地装饰它们只是代码膨胀。如果默认名称正确,则让XmlSerializer
使用这些名称执行其默认操作。在极少数情况下(不赞成)显式修饰名称可以让您在不破坏序列化的情况下更改基础属性名称,但如果必须这样做,则可以在那时添加属性。
因此,就其价值而言,只要结果合适,我就会省略它们,添加它们只是为了表示特定属性有什么不同。例如,您给出的代码是:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
[XmlAttribute("recordId")]
public int recordId { get; set; }
}
这立刻引起了人们对recordId
与众不同的关注。如果在所有项上都显式地设置了属性,那么就不太明显了,必须以不同的方式对其进行序列化。
XmlRoot
属性允许您在不更改类名的情况下控制元素的名称。
如果类名与XML元素名相同,则不需要包含它。
基本上,如何处理它并不重要。但是,对我来说,当我有明确的XML序列化约定时,它看起来更可读——这是一种适合在没有属性的情况下进行序列化的类型。然而,有时XML文档需要具有不适合C#语言命名规范的名称的元素,并且您必须使用属性:)