文件名称:序列化与反序列化-effective.debugging.2016.7
文件大小:8.09MB
文件格式:PDF
更新时间:2024-06-23 11:46:50
C#网络应用
4.6 序列化与反序列化 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它 将流转换为对象。两个过程结合可以存储和传输数据。 .NET Framework 提供两种序列化技术: 1) 二进制序列化 这种序列化可以保持类型不变,即可以在应用程序的不同调用之间保留对象的状态。 2) XML 和 SOAP 序列化 这种序列化仅序列化公共属性和字段,不保存类型。 4.6.1 二进制序列化与反序列化 序列化可被定义为将对象的状态存储到存储媒介中的过程。在此过程中,对象的公共字段 和私有字段以及类的名称(包括包含该类的程序集)都被转换为字节流,然后写入数据流。在 以后反序列化该对象时,创建原始对象的精确复本。 序列化有两个最重要的功能:一个是将对象的状态保持在存储媒体中,以便可以在以后重 新创建精确的副本;另一个是通过值将对象从一个应用程序域发送到另一个应用程序域中。例 如,序列化可用于在 ASP.NET 中保存会话状态并将对象复制到 Windows 窗体的剪贴板中。远 程处理还可以使用序列化通过值将对象从一个应用程序域传递到另一个应用程序域中。 1. 序列化 序列化一个类的最简单的方式是使用如下所示的 Serializable 属性标记。 [Serializable] public class AuthUserEntry { private string accountName; private int accountId; public string AccountName { } public int AccountId { } } } 下面用代码演示该类的实例是如何被序列化到一个二进制文件(.bin)中的。 AuthUserEntry user = new AuthUserEntry(); user.AccountId = 9912053; user.AccountName = "XinXin"; IFormatter formater = new BinaryFormatter(); Stream stream = new FileStream("UserInfo.bin", FileMode.Create, FileAccess.Write, FileShare.None); formater.Serialize(stream, user); stream.Close(); 在这段代码中,创建流的实例和使用的格式接口后,对该格式接口调用 Serialize 方法,类 中的所有成员变量都将被序列化,即使是那些已被标记为私有的变量。 2. 反序列化 要将对象还原回其以前的状态,首先,创建用于读取的流和格式化接口,然后用格式化接 口反序列化该对象。下面的代码示例说明如何执行上述的操作。 89