在C#开发中,XmlSerializer 是处理对象与XML之间序列化和反序列化的常用工具。它属于 System.Xml.Serialization 命名空间,使用简单、功能强大,适合将 .NET 对象转换为 XML 格式保存或传输,也支持从 XML 还原为对象。
一、基本用法:对象转XML(序列化)
要将一个对象序列化为XML字符串,需确保类是公共的,并具有无参构造函数。以下是一个示例:
public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } }使用 XmlSerializer 将 Person 实例转为 XML:
using System.IO; using System.Xml.Serialization; Person person = new Person { Name = "张三", Age = 28, Email = "zhangsan@example.com" }; XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (StringWriter writer = new StringWriter()) { serializer.Serialize(writer, person); string xml = writer.ToString(); Console.WriteLine(xml); }输出结果类似:
二、XML转对象(反序列化)
将之前生成的XML字符串还原为 Person 对象:
string xml = @"注意:反序列化时传入的XML必须与目标类结构匹配,否则会抛出异常。
三、控制序列化行为:特性(Attributes)
通过添加特性可以自定义XML输出格式,比如更改节点名、忽略字段、设置命名空间等。
[XmlElement("CustomName")]:指定元素名称 [XmlAttribute]:将属性序列化为XML属性而非子元素 [XmlIgnore]:跳过该字段/属性 [DefaultValue]:默认值不输出到XML [XmlRoot("CustomRoot")]:设置根元素名称示例:
[XmlRoot("Customer")] public class Person { [XmlElement("FullName")] public string Name { get; set; } [XmlAttribute] public int Age { get; set; } [XmlIgnore] public string Password { get; set; } }生成的XML如下:
四、处理集合与数组
XmlSerializer 支持 List
这样生成的XML更清晰:
使用 XmlArray 和 XmlArrayItem 可以分别控制集合标签和项标签名称。
五、注意事项与常见问题
类必须有公共无参构造函数,否则序列化失败 只支持公共读写属性(Property),不序列化字段(Field)除非特殊处理 泛型集合如 List建议创建 XmlSerializer 实例时复用,避免频繁创建影响性能:
private static readonly XmlSerializer _serializer = new XmlSerializer(typeof(Person)); 基本上就这些。掌握 XmlSerializer 的基本用法和特性控制,就能高效实现对象与XML之间的互转,适用于配置文件、数据交换等场景。