使用XmlSerializer可将对象序列化为XML,需定义公共属性和默认构造函数,通过特性如XmlRoot、XmlElement等自定义格式,支持单个对象与集合的序列化输出。

在.NET或其他编程环境中,将对象序列化为XML是一种常见的数据交换方式。通过序列化,可以将内存中的对象转换为XML格式的字符串,便于存储或传输。以下是实现对象序列化为XML的基本方法与示例。
使用.NET中的XmlSerializer进行序列化
XmlSerializer 是 .NET 中用于将对象序列化为XML的主要类。它支持公共属性和字段,并能自动生成符合结构的XML。
基本步骤如下:
- 定义一个可序列化的类,使用 [Serializable] 或确保类有默认构造函数
- 创建 XmlSerializer 实例,指定类型
- 调用 Serialize 方法,输出到文件或 StringWriter
using System;
using System.IO;
using System.Xml.Serialization;
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
class Program
{
static void Main()
{
var person = new Person
{
Name = "张三",
Age = 30,
City = "北京"
};
var serializer = new XmlSerializer(typeof(Person));
using (var writer = new StringWriter())
{
serializer.Serialize(writer, person);
string xmlResult = writer.ToString();
Console.WriteLine(xmlResult);
}
}
}
输出结果:
<?xml version="1.0" encoding="utf-16"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>张三</Name>
<Age>30</Age>
<City>北京</City>
</Person>
控制XML输出格式(使用特性)
可以通过添加 System.Xml.Serialization 命名空间下的特性来定制XML结构。
- [XmlElement("CustomName")]:更改元素名称
- [XmlAttribute]:将属性序列化为XML属性而非子元素
- [XmlRoot("CustomRoot")]:定义根元素名称
- [XmlIgnore]:忽略某个属性不序列化
[XmlRoot("用户")]
public class Person
{
[XmlElement("姓名")]
public string Name { get; set; }
[XmlAttribute("年龄")]
public int Age { get; set; }
[XmlIgnore]
public string City { get; set; }
}
输出示例:
<用户 年龄="30" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<姓名>张三</姓名>
</用户>
序列化集合或数组
也可以将对象列表序列化为XML。XmlSerializer 支持泛型集合和数组。
例如,序列化 List<Person>:
var people = new List<Person>
{
new Person { Name = "张三", Age = 30 },
new Person { Name = "李四", Age = 25 }
};
var serializer = new XmlSerializer(typeof(List<Person>));
using (var writer = new StringWriter())
{
serializer.Serialize(writer, people);
Console.WriteLine(writer.ToString());
}
基本上就这些。只要对象结构清晰并正确使用特性,就能方便地将对象转为XML格式。注意类必须有公共属性和默认构造函数,否则可能抛出异常。










