C# xml序列化与反序化有哪些方法
2025-02-15 11:07 钟铧若岩 阅读(6) 评论(0) 编辑 收藏 举报在 C# 中,XML 序列化和反序列化是将对象转换为 XML 格式(序列化)以及将 XML 格式转换回对象(反序列化)的过程。以下为你详细介绍相关的方法和示例。
1. 使用 System.Xml.Serialization.XmlSerializer
类
XmlSerializer
是.NET 框架中用于 XML 序列化和反序列化的核心类,它可以将对象的公共属性和字段转换为 XML,也可以将 XML 数据还原为对象。using System; using System.IO; using System.Xml.Serialization; // 定义一个可序列化的类 [Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } } public class Program { public static void Main() { // 序列化示例 Person person = new Person { Name = "John", Age = 30 }; XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (StringWriter writer = new StringWriter()) { serializer.Serialize(writer, person); string xml = writer.ToString(); Console.WriteLine("序列化后的XML:"); Console.WriteLine(xml); // 反序列化示例 using (StringReader reader = new StringReader(xml)) { Person deserializedPerson = (Person)serializer.Deserialize(reader); Console.WriteLine("\n反序列化后的对象:"); Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}"); } } } }
代码解释
- 定义可序列化的类:使用
[Serializable]
特性标记类,表示该类可以被序列化。 - 创建
XmlSerializer
实例:通过指定要序列化的对象类型来创建XmlSerializer
实例。 - 序列化对象:使用
Serialize
方法将对象转换为 XML 字符串。 - 反序列化 XML:使用
Deserialize
方法将 XML 字符串转换回对象。
2. 使用 System.Runtime.Serialization.DataContractSerializer
类
DataContractSerializer
是另一个用于序列化和反序列化对象的类,它支持更多的序列化选项,如数据契约和数据成员的控制。using System; using System.IO; using System.Runtime.Serialization; using System.Xml; // 定义一个具有数据契约的类 [DataContract] public class Employee { [DataMember] public string EmployeeName { get; set; } [DataMember] public int EmployeeId { get; set; } } public class Program { public static void Main() { // 序列化示例 Employee employee = new Employee { EmployeeName = "Jane", EmployeeId = 123 }; DataContractSerializer serializer = new DataContractSerializer(typeof(Employee)); using (MemoryStream stream = new MemoryStream()) { serializer.WriteObject(stream, employee); stream.Position = 0; using (XmlReader reader = XmlReader.Create(stream)) { string xml = new StreamReader(stream).ReadToEnd(); Console.WriteLine("序列化后的XML:"); Console.WriteLine(xml); // 反序列化示例 stream.Position = 0; Employee deserializedEmployee = (Employee)serializer.ReadObject(reader); Console.WriteLine("\n反序列化后的对象:"); Console.WriteLine($"EmployeeName: {deserializedEmployee.EmployeeName}, EmployeeId: {deserializedEmployee.EmployeeId}"); } } } }
代码解释
- 定义具有数据契约的类:使用
[DataContract]
特性标记类,使用[DataMember]
特性标记要序列化的属性。 - 创建
DataContractSerializer
实例:通过指定要序列化的对象类型来创建DataContractSerializer
实例。 - 序列化对象:使用
WriteObject
方法将对象写入流中。 - 反序列化 XML:使用
ReadObject
方法从流中读取对象。
总结
XmlSerializer
适用于简单的序列化需求,使用方便,但对类的结构有一定要求。DataContractSerializer
提供了更多的控制选项,如数据契约和数据成员的控制,适用于更复杂的序列化场景。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南