piet obermeyer
2001 年 8 月 【程序编程相关:DOTNETARX实例教学 】
microsoft corporation 【推荐阅读:自动获取表结构及Relation 】 目录 【扩展信息:如何对webbrowser和IE编程(二】摘要:为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域.例如,序列化可用于在 asp.net 中保存会话状态,以及将对象复制到 windows 窗体的剪贴板中.它还可用于按值将对象从一个应用程序域远程传递至另一个应用程序域.本文简要介绍了 microsoft .net 中使用的序列化.
简介
持久存储按值封送基本序列化选择性序列化自定义序列化序列化过程的步骤版本控制序列化规则 简介序列化是指将对象实例的状态存储到存储媒体的过程.在此过程中,先将对象的公共字段与私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流.在随后对对象进行反序列化时,将创建出与原对象完全相同的副本.
在面向对象的环境中实现序列化机制时,必须在易用性与灵活性之间进行一些权衡.只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行.例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化.以下各部分将探讨 .net 框架提供的可靠的序列化机制,并着重介绍使您可以根据需要自定义序列化过程的一些重要功能.
持久存储我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂.可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段与属性保存至磁盘以及从磁盘还原这些字段与属性.序列化提供了轻松实现这个目标的快捷方法.
公共语言运行时 (clr) 管理对象在内存中的分布,.net 框架则通过使用反射提供自动的序列化机制.对象序列化后,类的名称.程序集以及类实例的所有数据成员均被写入存储媒体中.对象通常用成员变量来存储对其他实例的引用.类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保同一对象不被序列化多次..net 框架所提供的序列化体系结构可以自动正确处理对象图表与循环引用.对对象图表的唯一要求是,由正在进行序列化的对象所引用的所有对象都必须标记为 serializable(请参阅基本序列化).否则,当序列化程序试图序列化未标记的对象时将会出现异常.
当反序列化已序列化的类时,将重新创建该类,并自动还原所有数据成员的值.
按值封送对象仅在创建对象的应用程序域中有效.除非对象是从 marshalbyrefobject 派生得到或标记为 serializable,否则,任何将对象作为参数传递或将其作为结果返回的尝试都将失败.... 下一页