C# 如何将xml的节点值映射到类的不同属性名

来源:这里教程网 时间:2026-02-21 17:31:10 作者:

在C#中,可以使用 XmlSerializer 将XML节点映射到类的属性。如果XML节点名称和类属性名不同,可以通过特性(Attribute)来指定映射关系。

1. 使用 [XmlElement] 特性进行字段映射

通过 [XmlElement] 特性,你可以将XML中的节点名绑定到类中任意名称的属性上。

例如,有如下XML:

<Person>
  <Name>张三</Name>
  <Age>25</Age>
</Person>

你想映射到类中名为 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 中的

<name></name>
节点值赋给 FullName 属性。

2. 反序列化示例代码

将XML字符串反序列化为对象:
using System;
using System.IO;
using System.Xml.Serialization;
string xml = @"
<Person>
  <Name>张三</Name>
  <Age>25</Age>
</Person>";
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 asicInfo> ```

可以定义嵌套类并映射:

[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#类属性之间的映射关系,即使名字完全不同也没问题。

相关推荐

热文推荐