我目前的解决方案工作正常。我有一个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>
假设每个属性都相同我应该使用XmlElement
标记明确地为每个元素添加前缀XmlAttribute
;或者离开上面定义的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; }
}
答案 0 :(得分:1)
默认情况下,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
的注意。如果您在所有项目上明确设置了属性,则不太明显它必须以不同方式进行序列化。
答案 1 :(得分:0)
XmlRoot
属性允许您控制元素的名称而不更改类的名称。
如果类名与XML元素名相同,则无需包含它。
答案 2 :(得分:0)
基本上,如何处理它并不重要。但是,对于我来说,当我有明确的XML序列化契约时,它看起来更具可读性 - 一种适用于没有属性的序列化的类型。但是,有时XML文档需要名称不适合C#lang的元素。命名规范,你必须使用属性:)