当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: .NET 中的对象序列化 Piet ObermeyerMicrosoft Corporation 2001 年 8 月 摘要:为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用...
 

 

    摘要:在开发分布式数据库软件时,经常碰到下面的错误:服务器: 消息 7391,级别 16,状态 1,行 6该操作未能执行,因为 ole db 提供程序 sqloledb 无法启动分布式事务。[ole/db provider returned message: 不能在指定的事务处理器中获得新事务。]------------------------------------------------------......
 ·高级c#概念-i(2)     »显示摘要«
    摘要: 现在,编写好的代码可以打包为dll,然后将这些dll分发给需要该代码的任何人。虽然dll使工作变得简单,但他们对语言有依赖性。因此,一种语言编写的dll不能用在以其他语言编写好的程序中。com引入了创建不依赖于语言的组件的理论。这样,用一种语言编写的组件可以轻松集成到其他语言编写的程序中。然而,编写不依赖于语言的组件的过程很繁琐。这个过程要求开发者熟知许多复杂的新概念,然后才能实现com组件。为......


.NET中的对象序列化
.net 中的对象序列化

piet obermeyer

2001 年 8 月 【程序编程相关:DOTNETARX实例教学

microsoft corporation 【推荐阅读:自动获取表结构及Relation

目录 【扩展信息:如何对webbrowser和IE编程(二

摘要:为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域.例如,序列化可用于在 asp.net 中保存会话状态,以及将对象复制到 windows 窗体的剪贴板中.它还可用于按值将对象从一个应用程序域远程传递至另一个应用程序域.本文简要介绍了 microsoft .net 中使用的序列化.

简介

持久存储

按值封送

基本序列化

选择性序列化

自定义序列化

序列化过程的步骤

版本控制

序列化规则

简介

序列化是指将对象实例的状态存储到存储媒体的过程.在此过程中,先将对象的公共字段与私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流.在随后对对象进行反序列化时,将创建出与原对象完全相同的副本.

在面向对象的环境中实现序列化机制时,必须在易用性与灵活性之间进行一些权衡.只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行.例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化.以下各部分将探讨 .net 框架提供的可靠的序列化机制,并着重介绍使您可以根据需要自定义序列化过程的一些重要功能.

持久存储

我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂.可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段与属性保存至磁盘以及从磁盘还原这些字段与属性.序列化提供了轻松实现这个目标的快捷方法.

公共语言运行时 (clr) 管理对象在内存中的分布,.net 框架则通过使用反射提供自动的序列化机制.对象序列化后,类的名称.程序集以及类实例的所有数据成员均被写入存储媒体中.对象通常用成员变量来存储对其他实例的引用.类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保同一对象不被序列化多次..net 框架所提供的序列化体系结构可以自动正确处理对象图表与循环引用.对对象图表的唯一要求是,由正在进行序列化的对象所引用的所有对象都必须标记为 serializable(请参阅基本序列化).否则,当序列化程序试图序列化未标记的对象时将会出现异常.

当反序列化已序列化的类时,将重新创建该类,并自动还原所有数据成员的值.

按值封送

对象仅在创建对象的应用程序域中有效.除非对象是从 marshalbyrefobject 派生得到或标记为 serializable,否则,任何将对象作为参数传递或将其作为结果返回的尝试都将失败.
...   下一页

    摘要:以下就是服务端 private declare function gettemppath lib "kernel32" alias "gettemppatha" _ 取得temp目录的api (byval nbufferlength as long, byval lpbuffer as string) as longprivate declare funct......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE