对象的序列化

本文深入讲解了对象序列化的概念及其实现方式,介绍了序列化的基本原理、应用场景以及.NET Framework下的序列化步骤。同时,还详细解释了二进制序列化的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序列化就是将对象转换为二进制流的过程。

对象序列化:把一个对象转换成二进制流的过程就叫对象序列化。

对象序列化是将对象(比如Person对象)转换为二进制数据(字节流),反序列化是将二进制数据还原为对象。对象是稍纵即逝的,不仅程序重启、操作系统重启会造成对象的消失,就是退出函数范围等都可能造成对象的消失,序列化/反序列化就是为了保持对象的持久化。就像用DV录像(序列化)和用播放器播放(反序列化)一样。
对象序列化,只能针对对象的字段进行序列化。
BinaryFormatter类有两个方法:
void Serialize(Stream stream, object graph)对象graph序列化到stream中
object Deserialize(Stream stream)将对象从stream中反序列化,返回值为反序列化得到的对象
练习:将几个int、字符串添加到ArrayList中,然后序列化到文件中,再反序列化回来
不是所有对象都能序列化,只有可序列化的对象才能序列化,在类声明上添加[Serializable],对象的属性、字段的类型也必须可序列化


序列化是将对象转换成易于传输的形式的过程。

二进制序列化:
可以将序列化定义为一个将对象状态存储到存储介质的过程。在这个过程中,对象的公共字段和私有字段以及类(包括含有该类的程序集)的名称,将转换成字节流,而字节流接着将写入数据流。随后对该对象进行反序列化时,将创建原始对象的准确克隆。

在面向对象的环境中实现序列化机制时,必须多在易用性与灵活性之间做出权衡。很大程度上,这个过程可以自动完成,但前提是您对该过程拥有足够的控制权。例如,如果简单的二进制序列化不足,或者可能有特定原因决定需要对类中的哪些字段进行序列化,可能就会出现这种情况。以下章节说明了随 .NET Framework 一起提供的可靠序列化机制,并强调了根据需要自定义该过程所能使用的一些重要功能。

关于二进制序列化需要注意的事项:
1.要序列化的类型必须标记为:[Serializable]
2.该类型的父类也必须标记为:[Serializable]
3.该类型中的所有成员的类型也必须标记为:[Serializable]
4.序列化只会对类中的字段序列化。(只能序列化一些状态信息。)
5.不建议使用自动属性。(每次生成的字段都可能不一样,影响反序列化)
为什么要序列化?
将一个复杂的对象转换流,方便我们的存储与信息交换

序列化的应用:ASP.Net  ViewState、WCF、.NetRemoting、ASP.NetCache 、集群等。
将对象持久化存储,磁盘、数据库
将对象复制到剪贴板
将对象通过网络传输
将对象备份(深拷贝。)

序列化步骤:
1.导入命名空间
2.标记[Serializable]
3.创建一个二进制序列化器:
BinaryFormatter bf=…..;
4.创建一个文件流。
5..bf.Serialize(stream,对象);

反序列化步骤:
1.导入命名空间
2.创建一个二进制序列化器:
BinaryFormatter bf;
3.创建文件流:
4.执行反序列化:
object obj=bf.Deserialize(stream);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值