黑马程序员技术交流社区

标题: c#中序列化和反序列 [打印本页]

作者: 成刚    时间: 2012-2-29 14:57
标题: c#中序列化和反序列
怎么操作呀?最好是举例说明!
作者: 祝冰鑫    时间: 2012-2-29 15:59
所谓的序列化就是是将对象转换为容易传输的格式的过程,一般情况下转化打流文件,放入内存或者IO文件中。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象,或者和其它应用程序共享使用。反之,反序列化根据流重新构造对象。
作者: 赵国梁    时间: 2012-2-29 17:06
本帖最后由 赵国梁 于 2012-2-29 17:14 编辑

序列化是讲对象的状态存储到特定介质中的过程,也可以说是讲对象状态转换为可保持或传输的格式的过程。在序列化过程中,会将对象的公有成员,私有成员包括类名,都转换成数据流的形式,存储到存储介质中,这里说的存储介质通常指文件。例如:
  1. FileStream fileStream=null;
  2. //定义一个文件流
  3. fileStream=new FileStream("profile.bin",FileMode.Create);
  4. //二进制方式
  5. BinaryFormatter bf=new BinaryFormatter();
  6. //序列化保存配置文件对象Profile
  7. bf.Serialize(fileStream,Profile);
复制代码
因为序列化需要通过文件流来保存到文件,所以要事先定义一个文件流,BinaryFormatter是一个二进制格式化器,这个二进制格式话器具有一个重要的Serialize()方法。这个方法主要的功能是将特定对象序列化到特定文件之中,有两个参数,第一个参数是指定序列化过程的文件流,第二个参数是要保存的对象。

既然能将对象的状态保存到特定介质中,那么我们又应该能将这些对象状态读取回来,这就用到反序列化,反序列化就是从特定存储介质中将数据重新构建对象的过程。如下示例:
  1. FileStream fileStream=null;
  2. //定义一个文件流
  3. fileStream=new FileStream("profile.bin",FileMode.Open);
  4. //二进制方式
  5. BinaryFormatter bf=new BinaryFormatter();
  6. //反序列化对象Profile
  7. Proflie=(Profile)bf.Deserialize(fileStream);
复制代码
Deserialize方法就是反序列化的方法,唯一参数是指定序列化的文件流,它返回一个Object对象,通常我们仍然需要进一步讲这个Object对象转换成我们序列化时相应的对象类型。
反序列化将创建出原对象完全相同的副本,在序列化时保存的数据将无损失的保存下来。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2