使用[XmlElement]可将XML节点映射到不同名的类属性,如Name节点映射到FullName属性;2. 反序列化时XmlSerializer自动匹配特性指定的节点名;3. 支持嵌套类映射,通过[XmlElement]处理子节点结构;4. 其他特性如[XmlAttribute]、[XmlArray]等支持属性、集合等复杂场景。

在C#中,可以使用 XmlSerializer 将XML节点映射到类的属性。如果XML节点名称和类属性名不同,可以通过特性(Attribute)来指定映射关系。
1. 使用 [XmlElement] 特性进行字段映射
通过 [XmlElement] 特性,你可以将XML中的节点名绑定到类中任意名称的属性上。例如,有如下XML:
张三 25
你想映射到类中名为 FullName 的属性而不是 Name,可以这样定义类:
using System.Xml.Serialization;
[XmlRoot("Person")]
public class Person
{
[XmlElement("Name")]
public string FullName { get; set; }
[XmlElement("Age")]
public int Age { get; set; }
}序列化或反序列化时,XmlSerializer 会自动将 XML 中的 节点值赋给 FullName 属性。
2. 反序列化示例代码
将XML字符串反序列化为对象:using System;
using System.IO;
using System.Xml.Serialization;
string xml = @"
zuojiankuohaophpcnPersonyoujiankuohaophpcn
zuojiankuohaophpcnNameyoujiankuohaophpcn张三zuojiankuohaophpcn/Nameyoujiankuohaophpcn
zuojiankuohaophpcnAgeyoujiankuohaophpcn25zuojiankuohaophpcn/Ageyoujiankuohaophpcn
zuojiankuohaophpcn/Personyoujiankuohaophpcn";
XmlSerializer serializer = new XmlSerializer(typeof(Person));
using (StringReader reader = new StringReader(xml))
{
Person person = (Person)serializer.Deserialize(reader);
Console.WriteLine($"姓名: {person.FullName}, 年龄: {person.Age}");
}3. 支持嵌套节点和复杂结构
对于嵌套的XML结构,也可以用同样的方式处理。比如XML中有子节点:
```xml可以定义嵌套类并映射:
[XmlRoot("Person")]
public class Person
{
[XmlElement("BasicInfo")]
public BasicInfo Info { get; set; }
}
public class BasicInfo
{
[XmlElement("FirstName")]
public string FirstName { get; set; }
[XmlElement("LastName")]
public string LastName { get; set; }
}4. 其他常用特性
- [XmlAttribute]:用于映射XML属性而非子节点。
- [XmlArray] 和 [XmlArrayItem]:用于处理集合。
- [DefaultValue]:设置默认值,避免生成冗余XML。
基本上就这些。只要在属性上加上合适的特性,就能灵活控制XML节点与C#类属性之间的映射关系,即使名字完全不同也没问题。










