使用ObjectManager类管理反序列化的对象课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《使用ObjectManager类管理反序列化的对象课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 ObjectManager 管理 反序 对象 课件
- 资源描述:
-
1、第第7章章数据的序列化数据的序列化.NET Framework 2.0 程序设计程序设计第第 1 章章:.NET Framework 2.0简介简介 第第 2 章:公共语言运行库和章:公共语言运行库和类型类型 第第 3 章:托管代码的编译和章:托管代码的编译和执行执行 第第 4 章:委托和事件章:委托和事件 第第 5 章:读取和写入文件章:读取和写入文件 第第 6 章:集合和泛型章:集合和泛型 第第 7 章:章:数据的序列化数据的序列化 第第 8 章:章:GDI+第第 9 章章:在在.NET Framework 2.0中实现加密中实现加密第第 10 章:章:COM 组件与组件与.NET Fra
2、mework程序集之间的交程序集之间的交互操作互操作 第第 11 章:使用类型元数据章:使用类型元数据 第第 12 章:创建多线程应用章:创建多线程应用程序和应用程序域程序和应用程序域 第第 13 章:代码访问安全性章:代码访问安全性 第第 14 章:监视和调试应用章:监视和调试应用程序程序 第第 15 章:使用服务应用程章:使用服务应用程序和电子邮件消息序和电子邮件消息 第第 16 章:创建全球化应用章:创建全球化应用程序程序 第第 17 章:配置和安装程序章:配置和安装程序集集 本章学习目标:本章学习目标:通过通过 BinaryFormatter 类和类和 SoapFormatter 类,
3、将类,将对象序列化为二进制格式和对象序列化为二进制格式和 SOAP 格式格式 通过通过 XmlSerializer 类、类、IXmlSerializable接口及接口及 XML 序列化属性和委托,将对象序列化为自定序列化属性和委托,将对象序列化为自定义义 XML 格式格式创建自定义序列化类创建自定义序列化类 目标目标 生成序列化的二进制格式和生成序列化的二进制格式和 SOAP 格式格式生成序列化的生成序列化的 XML 格式格式创建自定义序列化类创建自定义序列化类 小结小结实验实验习题习题第第7章章 数据的序列化数据的序列化生成序列化的二进制生成序列化的二进制格式和格式和 SOAP 格式格式 7
4、.1生成序列化的二进制生成序列化的二进制格式和格式和 SOAP 格式格式对象数据的传输对象数据的传输 序列化和反序列化序列化和反序列化 代码示例代码示例VBBinaryFormatter类的成员类的成员 BinaryFormatter类的成员类的成员 7.1.1 BinaryFormatter类的成员类的成员成员描述AssemblyFormat 属性AssemblyFormat 属性定义或返回用于序列化程序集名称的程序集格式。该返回值取决于 FormatterAssemblyStyle 枚举(拥有两个成员:Full 和 Simple)的值。在程序集格式为Full 的情况下,程序集描述包括程序集
5、名称、所保存的对象的全球文化以及程序集的版本和公钥标志。在程序集格式为Simple 的情况下,程序集描述仅由程序集名称组成。Binder 属性Binder 属性定义或返回一个SerializationBinder 类的对象,该对象用于控制将序列化对象绑定到类型的过程。这里,类型是指在序列化过程中用于加载序列化对象的自定义类型,而非该序列化对象的实际类型。在对象被反序列化时,这将有助于你选择所要的对象类型。例如,雇员信息原来以Employee 类型进行保存,稍后,由于雇员要从公司商店购买一些产品,所以要序列化该雇员信息。因此,你需要将该雇员信息以Customer 类型进行反序列化。通过 Seri
6、alizationBinder类可加载自定义类型,以替代由序列化引擎执行的默认加载,这意味着可以更改序列化对象的默认行为。另外,还可以通过使用 SerializationBinder 来检查应用程序域中加载的类型。这将有助于维护包含拒绝类型的黑名单和允许类型的白名单,并限制被加载和实例化的类型。BinaryFormatter类的类的成员成员(续)(续)7.1.1 BinaryFormatter类的成员类的成员Context 属性Context 属性定义或返回 BinaryFormatter 的 StreamingContext。StreamingContext 结构指示格式化程序所使用的位的源
7、或目标。FilterLevel 属性FilterLevel 属性定义或返回 BinaryFormatter 所执行的自动反序列化的 TypeFilterLevel 枚举类型的值。该值取决于 TypeFilterLevel 枚举所指定的值,可为 Low 或 Full。Low反序列化级别是.NET Framework 中的默认值。它仅对与最基本的远程处理功能相关联的类型进行反序列化,从而抵御反序列化攻击。反序列化攻击允许未授权用户拦截消息,并读取或更改该消息中的信息。Low 反序列化级别支持的类型有:远程处理基础结构对象、基元类型、引用类型以及值类型。Full 反序列化级别支持对所有这些类型的自动
8、反序列化,即在任何情况下受远程处理支持的类型。续表续表:SurrogateSelector 属性SurrogateSelector 属性定义或返回 ISurrogateSelector 接口,以控制序列化和反序列化过程中的类型替换。ISurrogateSelector 接口属于 System.Runtime.Serialization 命名空间。使用 SurrogateSelector属性,未标记为可序列化的对象也可被序列化。假设一个示例,其中你创建一个 Customer 类型的对象,但是不能将其标记为 Serializable。因此,你创建一个ISurrogateSelector 接口的类型
9、,并将SurrogateSelector属性设置为该类型的对象,以将 Customer 类型指向到已标记为可序列化的Person 类型。这允许序列化对象的 Customer 类型。TypeFormat 属性TypeFormat 属性定义或返回类型说明在序列化流中的布局格式。该属性接收一个 FormatterTypeStyle 枚举类型的值,该枚举类型拥有以下成员:TypesAlways:指示可为所有对象和 ISerializable 对象成员提供类型。TypesWhenNeeded:指示只能为对象数组、Object类型的对象成员以及 ISerializable 非基元值类型(例如结构和枚举)声
10、明类型。XsdString:指示可以 XSD 格式(而非 SOAP 格式)提供字符串。7.1.1 BinaryFormatter类的成员类的成员续表续表续表续表:DeSerialize 方法DeSerialize 方法将指定的流反序列化为对象图。如果反序列化成功,则该流中的当前位置必须位于对象图的开头。该方法将返回该对象图的顶级对象。Deserialize 方法拥有两种重载形式:BinaryFormatter.Deserialize(Stream):此形式将指定的流反序列化为对象图。BinaryFormatter.Deserialize(Stream,HeaderHandler):此形式也将指
11、定的流反序列化为对象图。另外,此形式中提供的 HeaderHandler 参数将处理该流中的所有标题对象。标题对象传达关于远程函数调用的信息。标题对象的一些例子包括事务ID 或方法签名。如果创建 HeaderHandler,则需要确定要处理该事件的方法。Serialize 方法Serialize 方法将对象或具有指定头的对象图序列化为给定的流。Serialize 方法拥有以下两种重载形式:BinaryFormatter.Serialize(Stream,Object):此形式将对象或具有指定头的对象图序列化为给定的流。BinaryFormatter.Serialize(Stream,Objec
12、t,Header):此形式通过附加所提供的标题,也将对象或具有指定头的对象图序列化为给定的流。所包括的标题将有助于传输关于消息如何处理的信息。序列化进程包含序列化流的开始处的标题参数所提供的信息。7.1.1 BinaryFormatter类的成员类的成员续表续表续表续表:SoapFormatter类的成员类的成员 SoapFormatter类的成员类的成员 7.1.2 SoapFormatter类的成员类的成员成员描述AssemblyFormat 属性AssemblyFormat 属性定义或返回用于序列化程序集名称的格式。此属性使用在生成的 SOAP 信息中程序集引用的 FormatterAs
13、semblyStyle 枚举格式。当反序列化一个对象时,这些引用可用于定位程序集。该属性只应用于消息的格式,而不应用于序列化对象的格式,这是由于序列化对象的格式是通过选择BinaryFormatter 或SoapFormatter来控制的。Binder 属性在 SoapFormatter 类中关于此属性的描述与 BinaryFormatte 类中的描述相同。7.1.2 SoapFormatter类的成员类的成员Context 属性Context 属性定义或返回和SoapFormatter 一起使用的 StreamingContext。StreamingContext 包含关于序列化消息的目标的
14、信息,可允许目标对象为其接收的对象确定正确的上下文。例如,你已从 Person 类派生了许多类型,且 Customer 类型即是其中一个。当序列化 Person 类型的一个对象时,你希望该对象能告知目标它是 Customer 类型。Context 属性被传递给处理自己的序列化的对象。FilterLevel 属性FilterLevel 属性定义或返回自动反序列化的 TypeFilterLevel 枚举类型的值,以用于.NET Framework 远程处理。该值取决于 TypeFilterLevel 枚举所指定的值,可为 Low 或 Full。该属性在 SoapFormatter 中支持的 Low
15、 和Full 反序列化级别类型和在 BinaryFormatter 中所支持的相同。SurrogateSelector 属性SurrogateSelector 属性定义或返回 ISurrogateSelector 类,以控制序列化和反序列化过程中的类型替换。该类属于 System.Runtime.Serialization 命名空间。ISurrogateSelector 指定一个替换类型以控制未定义为可序列化的特定类型的序列化过程。序列化代理提供一个对象,以处理另一个对象的序列化要求,并在必要时转换序列化数据。SoapFormatter类的类的成员(续)成员(续)续表续表:7.1.2 Soap
16、Formatter类的成员类的成员TopObject 属性TopObject 属性定义或返回 ISoapMessage,一个在传输字节过程中用于发送和接收的消息类型,其中可反序列化SOAP 顶级对象。TopObject 属性设置 ISoapMessage 以接收具有反序列化 RPC(Remote Procedure Call,远程过程调用)格式的消息中的数据。TypeFormat 属性TypeFormat 属性定义或返回类型说明在序列化流中的布局格式。该属性控制当SOAP 消息中生成对象引用标识符时的格式类型。该属性接收一个FormatterTypeStyle 枚举类型的值,该枚举类型拥有以下
17、成员:TypesAlwaysTypesWhenNeededXsdStringSoapFormatter类的类的成员(续)成员(续)续表续表:续表:续表:7.1.2 SoapFormatter类的成员类的成员DeSerialize 方法DeSerialize 方法将提供流上的数据反序列化,并在接收位置重组对象图。SoapFormatter提供了Deserialize方法的下列两个版本:Deserialize(Stream):该方法存储包含要被反序列化的数据的流,并返回该反序列化图形的顶级对象。Deserialize(Stream,HeaderHandler):该方法将流反序列化为对象图,并由指定
18、的委托来处理流中的任何头,以对在流中找到的任何头对象进行处理。Serialize 方法Serialize 方法将对象或具有指定根的对象图序列化为给定的流。SoapFormatter提供了 Serialize 方法的以下两个版本:Serialize(Stream,Object):此方法将嵌入到 SOAP 消息正文内的对象序列化为指定的流。Serialize(Stream,Object,Header):此方法也将嵌入到 SOAP 消息正文内的对象序列化为指定的流,但是标题数组将指定要包含在SOAP 消息中的标题。该方法为序列化的对象创建包含正文部分和标题部分的消息。SoapFormatter类的类
19、的成员(续)成员(续)生成序列化的二进制格式和生成序列化的二进制格式和 SOAP 格式格式生成序列化的生成序列化的 XML 格式格式创建自定义序列化类创建自定义序列化类 小结小结实验实验习题习题第第7章章 数据的序列化数据的序列化使用使用XmlSerializer 类将对象序列化为类将对象序列化为 XML 格式格式 使用使用 XML 序列化属性控制生成的序列化属性控制生成的 XML 生成序列化的生成序列化的 XML 格式格式7.2生成序列化的生成序列化的 XML 格式格式XML 是一种开放式标准。是一种开放式标准。XML 序列化是一个将对象的公共属序列化是一个将对象的公共属性和字段转换为序列化
20、的性和字段转换为序列化的 XML 格式以达到存储或传输目的的格式以达到存储或传输目的的过程。过程。XML 序列化还可用于将对象序列化为遵循序列化还可用于将对象序列化为遵循 SOAP 规范规范的的 XML 流。流。XmlSerializer 类中最常用的方法类中最常用的方法使用使用 XmlSerializer类将对类将对象序列化为象序列化为XML格式格式 7.2.1 使用使用XmlSerializer 类将类将对象序列化为对象序列化为 XML 格式格式方法描述CanDeserializeCanDeserialize 方法将检查 XmlSerializer 类能否反序列化指定的XML 文档。该方法
21、将接受 XmlReader 作为一个指向反序列化的文档的参数。如果 XmlSerializer 类能反序列化 XmlReader 所指向的对象,则 CanDeserialize 方法将返回true。否则,它将返回false。DeserializeDeserialize 方法将 XML 文档反序列化为其原始状态。该方法通过使用反序列化的对象的类型来构造 XmlSerializer 类。它从 XML 文档读取并构造一个对象,该对象的类型即是构造 XmlSerializer 时所使用的相应类型。当解析 XML 时,数据被转换为该对象的有关成员的数据类型。可以用多种格式指定要反序列化的 XML 文档,
22、例如Stream、TextReader和 XMLReader。因此,Deserialize 方法拥有以下重载形式:XmlSerializer.Deserialize(Stream):该形式对指定流中包含的 XML 文档进行反序列化。该流提供了一系列字节的泛型视图。XmlSerializer.Deserialize(TextReader):该形式对指定的 TextReader 所包含的 XML 文档进行反序列化。TextReader 表示一个可以读取一组连续字符的读取器。XmlSerializer.Deserialize(XmlReader):该形式对指定的 XmlReader 所包含的 XML
23、 文档进行反序列化。XmlReader 表示一个提供快速、非缓存和只进访问 XML 数据的读取器。7.2.1 使用使用XmlSerializer 类将类将对象序列化为对象序列化为 XML 格式格式FromTypesFromTypes 方法将返回从类型数组中创建的 XmlSerializer 对象数组。该方法有助于创建XmlSerializer 对象数组,以处理 Type 对象数组。SerializeSerialize 方法将对象序列化到 XML 文档。该方法拥有多种重载形式。其中的一些重载形式如下:Serialize(Stream,Object):序列化指定的对象并使用指定的流将 XML 文档
24、写入文件。Serialize(TextWriter,Object):序列化指定的对象并使用指定的 TextWriter 将 XML 文档写入文件。Serialize(XmlWriter,Object):序列化指定的对象并使用指定的 XmlWriter 将 XML 文档写入文件。每种重载形式允许使用不同的方法将特定对象序列化为指定的流。一些重载还允许将 XML 命名空间的引用指定到生成的XML 中。代码示例代码示例C使用使用XmlSerializer 类将对象类将对象序列化为序列化为 XML 格式(续)格式(续)续表续表:自定义自定义 XML 格式的属性格式的属性 7.2.2 使用使用 XML
25、序列化属性序列化属性控制生成的控制生成的 XML属性描述XmlAnyAttributeAttributeXmlAnyAttributeAttribute 包含作为 XML 文档的一部分进行发送的任意数据(作为元素的属性)。该属性的用途是建立一个字段或属性,以接收没有映射到类的字段或属性的 XML 属性。XmlAnyAttributeAttribute 可以应用于一个表示 XmlAttribute 或 XmlNode 对象数组的字段。XmlAttribute 表示 XML 元素的某个属性,而XmlNode 表示 XML 文档中的单个节点。如果指定了该属性,则在反序列化之后,不具有该反序列化类的相
展开阅读全文