C#对象序列化与反序列化详解及示例

需积分: 10 1 下载量 135 浏览量 更新于2024-10-15 收藏 9KB TXT 举报
“C#序列化和反序列化” 在编程领域,序列化和反序列化是两个关键概念,尤其在C#中它们被广泛应用于数据持久化、网络通信以及跨进程数据交换。简单来说,序列化是将一个对象转换为可存储或传输的数据流的过程,而反序列化则是将这个数据流恢复为原始对象的过程。这使得程序能够保存对象的状态并在稍后恢复,或者在网络之间传递对象。 C#提供了多种序列化机制,包括: 1. BinaryFormatter: 这是C#中最基本的序列化器,它将对象转换为二进制格式。这种格式对于内存效率高,但通常不适用于人类阅读。BinaryFormatter可以序列化整个对象图,包括私有字段和属性。 2. SoapFormatter: 用于XML序列化的特殊形式,主要用于Web服务,因为它生成SOAP(简单对象访问协议)消息。SOAP是一种基于XML的协议,用于在Web上交换结构化和类型化信息。 3. XMLSerializer: 直接生成XML格式的序列化结果,XML是一种可读性高的格式,常用于与不同平台之间的数据交换。XMLSerializer允许对序列化的字段和属性进行更细粒度的控制。 在C#中,为了使一个类可序列化,需要将其标记为`[Serializable]`特性。例如,以下是一个简单的可序列化的`Book`类示例: ```csharp using System; using System.Collections; using System.Text; namespace SerializableTest { [Serializable] public class Book { public Book() { alBookReader = new ArrayList(); } public string strBookName; [NonSerialized] // 非序列化属性 public string strBookPwd; private string _bookID; public string BookID { get { return _bookID; } set { _bookID = value; } } public ArrayList alBookReader; private string _bookPrice; public void SetBookPrice(string price) { _bookPrice = price; } // 其他方法... } } ``` 在这个`Book`类中,`strBookPwd`属性通过`[NonSerialized]`特性被排除在序列化之外,意味着它不会被包含在序列化后的数据中。`_bookID`和`_bookPrice`是私有字段,但因为它们是可序列化的,所以它们会被序列化和反序列化。 C#中的反序列化通常是通过`BinaryFormatter`或其他序列化器的`Deserialize`方法完成的,它接受一个包含序列化数据的流,并返回原始的对象实例。 除了这些标准的序列化器,C#还支持JSON序列化,如使用Newtonsoft.Json库的`JsonConvert`类,这在Web应用和API开发中非常常见,因为JSON格式易于理解和处理。 C#的序列化和反序列化是数据持久化和交换的关键工具,它们可以帮助开发者保存对象状态,实现跨进程通信,并简化数据的存储和恢复流程。不同的序列化器根据具体需求提供不同的特性和优势,如二进制的高效、XML的可读性以及JSON的广泛兼容性。