ASP.NET序列化

来源:互联网 发布:中国导弹水平 知乎 编辑:程序博客网 时间:2024/04/30 22:44

在ASP.NET中,存储信息数据一般有以下三种方式做为选择:

一、存储到 Session 中;
二、存储到 Cookie 中;
三、存储到 数据库 中。

同时,序列化的作用也是这样,不过我认为序列化这种方法更安全,更合理。那么,

序列化是什么:


序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。

序列化有什么特点:


如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。

 
什么时候使用序列化:

一:对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。
二:对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。


对象(比如Person对象)转换为二进制数据(字节流)

   1)对象序列化,只能针对对象的字段进行序列化。【方法不被序列化,接口即不可以】

2反序列化:将二进制数据还原为对象。

3为什么要进行对象序列化??将一个复杂的对象转换流,方便我们的存储与信息交换【可以存储或是发送】。对象是稍纵即逝的,不仅程序重启、操作系统重启会造成对象的消失,就是退出函数范围等都可能造成对象的消失,序列化/反序列化就是为了保持对象的持久化。就像用DV录像(序列化)和用播放器播放(反序列化)一样。

4不是所有对象都能序列化,只有可序列化的对象才能序列化,在类声明上添加[Serializable],对象的属性、字段的类型也必须可序列化

5关于二进制序列化需要注意的事项:

1.要序列化的类型必须标记为:[Serializable]

2.该类型的父类也必须标记为: [Serializable]

3.该类型中的所有成员的类型也必须标记为: [Serializable]

4.序列化只会对类中的字段序列化。【只能序列化一些状态信息】

序列化的步骤:

1.创建一个二进制序列化器:

BinaryFormatterbf=…..;

1.5:创建一个文件流。

2.bf.Serialize(stream,对象);

 

7反序列化的步骤

1.创建一个二进制序列化器:

BinaryFormatterbf;

2.创建文件流:

3.执行反序列化:

object obj=bf.Deserialize(stream);


举例: