C# 如何将xml文件反序列化为对象

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

在 C# 中,将 XML 文件反序列化为对象可以通过 XmlSerializer 类来实现。这个类位于 System.Xml.Serialization 命名空间中,能够将 XML 数据映射到 .NET 对象上,前提是类的结构与 XML 的结构匹配。

1. 准备对应的类结构

要成功反序列化 XML,需要先定义一个与 XML 结构对应的 C# 类。使用属性或特性(Attribute)来控制序列化行为。

示例 XML 内容(person.xml):
<Person>
  <Name>张三</Name>
  <Age>30</Age>
  <Email>zhangsan@example.com</Email>
</Person>

对应的 C# 类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

2. 使用 XmlSerializer 反序列化 XML 文件

通过 XmlSerializer 读取文件并转换为对象实例。

using System;
using System.IO;
using System.Xml.Serialization;
<p>// 指定文件路径
string filePath = "person.xml";</p><p>// 创建反序列化器
XmlSerializer serializer = new XmlSerializer(typeof(Person));</p><p>// 读取文件并反序列化
using (FileStream stream = new FileStream(filePath, FileMode.Open))
{
Person person = (Person)serializer.Deserialize(stream);</p><pre class='brush:php;toolbar:false;'>// 使用结果
Console.WriteLine($"姓名:{person.Name},年龄:{person.Age},邮箱:{person.Email}");

}

3. 处理复杂 XML 结构(可选特性)

如果 XML 包含命名空间、自定义节点名或嵌套元素,可以使用特性进行映射。

示例:自定义元素名称
[XmlRoot("Customer")]
public class Person
{
    [XmlElement("FullName")]
    public string Name { get; set; }
<pre class='brush:php;toolbar:false;'>[XmlElement("YearsOld")]
public int Age { get; set; }
public string Email { get; set; }

}

这样即使 XML 中是 ,也能正确映射到 Name 属性。

4. 注意事项和常见问题

类必须有公共无参构造函数,否则反序列化会失败。 只有公共属性或字段会被序列化/反序列化。 确保 XML 文件存在且格式正确,避免解析异常。 可使用 try-catch 捕获 InvalidOperationException 等反序列化错误。

基本上就这些。只要类结构和 XML 匹配,使用 XmlSerializer 就能轻松完成反序列化。对于更复杂的场景,比如数组、集合或深层嵌套,也可以通过相应特性支持。

相关推荐