在C#开发中,将对象序列化为XML字符串是常见的数据处理需求,可用于数据持久化、接口数据交互等场景,实现过程主要依赖System.Xml.Serialization命名空间下的XmlSerializer类。

核心依赖与基础概念
实现对象到XML字符串的序列化,首先需要引入System.Xml.Serialization命名空间,该命名空间提供了XML序列化的核心功能。XmlSerializer类可以将对象的状态序列化为XML格式,也可以将XML反序列化为对象。
需要注意的是,待序列化的对象通常需要满足以下条件:
- 对象必须是公共的,且有无参公共构造函数
- 需要序列化的属性必须是公共的,且有对应的get和set访问器
- 不支持序列化字典、哈希表等复杂集合类型
基础序列化实现步骤
基础的对象序列化为XML字符串的流程分为三步:创建待序列化对象、初始化XmlSerializer实例、执行序列化操作并将结果转换为字符串。
定义待序列化对象
首先定义一个简单的用户类作为示例:
using System;
using System.Xml.Serialization;
// 定义用户类,标记可序列化
[XmlRoot("User")]
public class User
{
// 用户ID属性
[XmlAttribute("Id")]
public int UserId { get; set; }
// 用户名属性
[XmlElement("UserName")]
public string Name { get; set; }
// 用户年龄属性
[XmlElement("UserAge")]
public int Age { get; set; }
// 无参构造函数,序列化必须
public User() { }
public User(int userId, string name, int age)
{
UserId = userId;
Name = name;
Age = age;
}
}
实现序列化方法
接下来编写将User对象序列化为XML字符串的方法:
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
public class XmlSerializeHelper
{
/// <summary>
/// 将对象序列化为XML字符串
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="obj">待序列化的对象</param>
/// <returns>XML字符串</returns>
public static string SerializeToXmlString<T>(T obj)
{
if (obj == null)
{
throw new ArgumentNullException(nameof(obj), "待序列化对象不能为空");
}
XmlSerializer serializer = new XmlSerializer(typeof(T));
// 使用StringBuilder存储序列化结果
StringBuilder xmlStringBuilder = new StringBuilder();
using (StringWriter writer = new StringWriter(xmlStringBuilder))
{
// 执行序列化
serializer.Serialize(writer, obj);
}
return xmlStringBuilder.ToString();
}
}
调用示例
创建User对象并调用序列化方法,查看输出结果:
using System;
class Program
{
static void Main(string[] args)
{
// 创建用户对象
User user = new User(1, "张三", 25);
try
{
// 调用序列化方法
string xmlResult = XmlSerializeHelper.SerializeToXmlString(user);
Console.WriteLine("序列化结果:");
Console.WriteLine(xmlResult);
}
catch (Exception ex)
{
Console.WriteLine($"序列化失败:{ex.Message}");
}
}
}
运行上述代码后,输出的XML字符串如下:
<?xml version="1.0" encoding="utf-16"?> <User Id="1"> <UserName>张三</UserName> <UserAge>25</UserAge> </User>
常用自定义配置
在实际开发中,经常需要对生成的XML格式进行自定义,XmlSerializer提供了多个特性来实现需求:
| 特性名称 | 作用说明 |
|---|---|
| XmlRoot | 指定根节点的名称,可设置命名空间等属性 |
| XmlAttribute | 将属性序列化为XML节点的属性,而非子节点 |
| XmlElement | 指定属性对应的XML子节点名称 |
| XmlIgnore | 标记该属性不参与序列化 |
| XmlArray | 自定义集合类型属性的数组节点名称 |
| XmlArrayItem | 自定义集合内元素的节点名称 |
集合类型序列化示例
如果对象包含集合属性,可通过特性自定义序列化结果:
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
[XmlRoot("UserGroup")]
public class UserGroup
{
[XmlAttribute("GroupId")]
public int GroupId { get; set; }
[XmlArray("Users")]
[XmlArrayItem("UserInfo")]
public List<User> Users { get; set; }
public UserGroup()
{
Users = new List<User>();
}
}
序列化该对象后,集合部分会生成自定义的节点结构,更符合实际业务需求。
注意事项
- 序列化时默认使用UTF-16编码,如果需要UTF-8编码,可自定义StringWriter的编码格式
- 如果对象包含循环引用,XmlSerializer会抛出异常,需要提前处理对象结构
- 私有属性和字段默认不会被序列化,如需序列化需调整为公共属性
- 序列化大型对象时,建议使用流式操作避免占用过多内存
XML序列化是C#中轻量级的数据转换方式,掌握其使用方法可以快速解决很多数据交互场景的问题,开发者可根据实际需求灵活使用相关特性调整序列化结果。
C#XML序列化对象序列化XmlSerializer修改时间:2026-06-24 22:09:36