.NET序列化与反序列化实战教程

0 下载量 54 浏览量 更新于2024-08-31 收藏 62KB PDF 举报
“.net的序列化与反序列化实例” .NET框架中的序列化与反序列化是将对象的状态转换为可存储或可传输的形式的过程,然后可以将其还原为原始对象。这一过程对于数据持久化、网络通信以及跨应用程序域共享数据至关重要。 1. 序列化与反序列化概述 在C#中,序列化允许我们将对象转换为一种格式(如XML、JSON或二进制),以便保存到文件或通过网络发送。反序列化则是将这种格式的数据恢复为原来的对象。这样,我们可以在不同的时间点或不同的环境中重新创建对象的完整状态。 2. .NET序列化类型 .NET提供了多种序列化实现,包括: - BinaryFormatter:使用二进制格式存储对象,速度较快,能处理private和protected成员,但只适用于.NET环境,不跨平台。 - SoapFormatter:用于创建符合SOAP标准的XML序列化,常用于Web服务。 - XmlSerializer:生成XML格式的序列化数据,跨平台且可读性好,但不处理非公共字段和属性。 3. BinaryFormatter的使用 BinaryFormatter是.NET框架中最基础的序列化工具,以下是一个简单的示例: ```csharp BinaryFormatter ser = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); ser.Serialize(ms, DS); // 将DataSet对象DS序列化到MemoryStream byte[] buffer = ms.ToArray(); // 获取序列化后的字节数组 ``` 4. 反序列化过程 反序列化是将已序列化的数据恢复为对象,例如: ```csharp MemoryStream ms = new MemoryStream(bytes); // 从字节数组创建MemoryStream BinaryFormatter ser = new BinaryFormatter(); DataSetSurrogate dss = (DataSetSurrogate)ser.Deserialize(ms); // 反序列化回DataSetSurrogate对象 ``` 5. 完整实例 通常,我们会将整个序列化和反序列化过程封装在类或方法中,以便在应用中重复使用。下面是一个完整的示例: ```csharp using System; using System.Collections.Generic; using System.Text; using System.IO.Compression; using System.IO; namespace CSharpSerializationExample { class Program { static void Main(string[] args) { // 创建一个对象 SomeClass obj = new SomeClass(); // 序列化对象 byte[] serializedData = SerializeObject(obj); // 存储或传输序列化数据 // 反序列化数据 SomeClass newObj = DeserializeObject(serializedData); // 使用反序列化后的对象 } static byte[] SerializeObject(SomeClass obj) { using (MemoryStream ms = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); return ms.ToArray(); } } static SomeClass DeserializeObject(byte[] data) { using (MemoryStream ms = new MemoryStream(data)) { BinaryFormatter formatter = new BinaryFormatter(); return (SomeClass)formatter.Deserialize(ms); } } } public class SomeClass { // 类的属性和方法 } } ``` 在实际应用中,除了BinaryFormatter,我们还可以选择其他序列化工具,如DataContractSerializer、Json.NET等,根据具体需求选择最适合的序列化方法。同时,需要注意的是,序列化可能会导致安全问题,因此在处理敏感数据时,应确保使用安全的序列化机制,并对序列化的数据进行适当的加密和验证。