类型桥的制作方法

文档序号:6396143阅读:206来源:国知局
专利名称:类型桥的制作方法
技术领域
本发明涉及对象序列化,更特别地,本发明涉及通过更改序列化引擎的运行时间操作的扩展例程转换一种类型的对象为另一种类型的对象,而不必替换所述序列化引擎内的其他现有例程的方法、系统和计算机程序产品。
背景技术
总的来说,序列化指将单个内存中的对象或内存中的对象的图(嵌套的)转换为字节的线性序列,此序列适合于发送到远程位置、在硬盘上持续存储等等。反之,反序列化取得字节的线性序列并创建对应的单个内存中的对象或内存中的对象的图。序列化和反序列化一起导致初始对象的确切克隆的创建。
在现有技术中,序列化代码是作为整体实现写出,而不考虑定制的,除非替换整个实现。缺乏定制或扩展性造成了市场上的不灵活的序列化机制,市场包括开发者和其他感兴趣的一方。对整体实现而言,递增的改进或定制以直接处理特殊的问题通常是不可能的,且可能需要笨拙的修正或简单地排除所需的特定操作。只要在任何事件中采取任何定制,实现所需操作的标准例程通常对开发者是不可访问的,从而需要重新实现,这本质上(且通常是抑制性地)增加了开发所需的定制必须进行的工作。因此,通常仅有序列化代码的开发者能增加新特性到序列化代码中,这使最终用户不能开发他们自己的增强特性或改进现有的特性。
虽然对象的确切拷贝是序列化和反序列化的目标,对象类型、名称和数据的运行时间转换在一些情况下是需要的。如上所述,例如,序列化和反序列化可以用于发送对象到远程位置。远程位置可能期望特定的与源对象不同的对象类型、对象数据和对象名称。可以用现有技术写出序列化代码来执行对象转换,但是不能在运行时间增加转换并且转换对所有用户都是相同的,这忽略了不同用户可能有不同需要的可能性。虽然给定的转换可能在特殊的时间对特殊的用户非常重要,转换总体的相关性可能对用户的整体是无意义的,从而不会这样进行开发。
现有的序列化代码通常在识别要转换的对象的类型,或基于包含在对象内的数据进行转换时只能提供很少的灵活性。因此,需要基于在运行时间更改序列化和反序列化的定制例程将一种类型的对象转换为另一种类型的对象,而不必重新实现标准例程的方法、系统和计算机程序产品。

发明内容
本发明涉及转换初始类型的对象为结果类型的对象,并允许更改或定制转换处理的运行时间操作的方法、系统和计算机程序产品。根据本发明在下面详述的例子实施例,可扩展的序列化引擎序列化、反序列化并转换各种类型的对象。序列化引擎的运行时间操作由一个或多个实现所需定制或扩展的扩展例程更改。这些扩展例程更改序列化引擎的运行时间操作,而无需替换其他现有的例程。
在一个例子实施例中,对由序列化引擎接收以进行处理的初始对象识别类型信息。基于类型信息,初始对象被转换为中间表示,中间表示允许运行时间修改,包括对象名称、对象类型和对象数据的修改。根据一个或多个更改序列化引擎的运行时间操作的扩展例程来修改初始对象的中间表示,且中间表示被转换为结果对象或结果类型。
初始对象的中间表示可以包括对象名称、对象类型、对象数据,其中的每一个都可以由扩展例程修改。中间表示也可以由序列化引擎内的一个或多个标准例程修改。中间表示的修改可以基于类型信息内的特殊模式、初始对象内的对象数据、元数据,或上述的组合。
当初始对象为内存中的对象时,序列化引擎序列化初始对象来产生结果对象。结果对象可以被格式化为可扩展标记语言(XML)或适合于表示序列化的对象的其他格式。类似地,当结果对象为内存中的对象时,序列化引擎反序列化初始对象来产生结果对象。可以作为反序列化处理的部分实例化并产生结果对象。在某些情况下,初始对象和结果对象均为内存中的对象,或均为序列化的对象,如序列化引擎执行对象转换时。为了减少缓冲的需求,可以延迟中间表示的修改,直到中间表示被转换为结果对象。
本发明的其他特性和优点将在下面的说明中阐明,且部分将在说明中变得显然,或通过本发明的实施例来理解。可以通过在后附的权利要求中特别指出的工具的方法及其组合来实现和获得本发明的特性和优点。本发明的这些和其他特性通过下述说明和后附的权利要求将变得更加明确,且可以通过本发明的实施例来理解,如下面所述。


为了说明获取本发明的上述和其他特性及优点的方式,将通过引用在附图中展示的特定实施例来呈现对上面简述的本发明更具体的说明。应理解,这些附图仅展示本发明的典型实施例,且不应被视为是对本发明范围的限制。通过使用附图,将更确切和具体地说明和解释本发明。附图包括图1展示符合本发明的例子序列化模块和序列化架构;图2至图4在例子序列化、反序列化和类型转换管道的上下文中展示对象转换;图5A至图5B展示符合本发明的序列化、反序列化和转换对象的方法的动作和步骤;及图6展示对本发明提供适合的操作环境的典型系统。
具体实施例方式
本发明包括转换初始类型的对象为结果类型的对象并允许更改或定制转换处理的运行时间操作的方法、系统和计算机程序产品。本发明的实施例可以包括包含各种计算机硬件的一个或多个专用和/或一个或多个通用计算机,如在下面引用图6进行的详细说明。
图1展示符合本发明的例子序列化模块和序列化架构100(亦称为序列化引擎)。对于对象实例110,序列化模块100产生对应的序列化的可扩展标记语言(XML)对象150。类似地,对XML对象160,序列化模块100产生对应的反序列化的对象实例170。应注意,在此应用中,序列化通常被用作序列化(如,转换单个内存中的对象或内存中的对象的图为适合于发送到远程位置、在硬盘上持续存储等等的字节线性序列)、反序列化(通过字节线性序列创建对应的单个内存中的对象或内存中的对象的图)、转换(转换一种对象为另一种对象)等等的通用术语。下面就是这样的例子,如,序列化模块100序列化、反序列化及转换各种类型的对象。
序列化模块100包括一个或多个反映模块120、一个或多个转换模块130及一个或多个产生模块140。在此例子实施例中,序列化模块100转换接收到的内存中的对象实例110为适合于发送到远程位置的XML对象150,并转换接收到的XML对象实例160为内存中的对象实例170。当然,“内存中的”和“XML”仅仅是可以由序列化模块100创建或接收的对象类型的例子。可以在运行时替换序列化模块100内的每个模块(反映模块120、转换模块130和产生模块140)以进行定制的序列化、反序列化或转换。
反映模块120负责识别接收的对象实例110和接收的XML对象160的类型信息。所述类型信息可以包括存储的或接收到的元数据,所述元数据和在管理代码环境内所管理的类型关联。另外,类型信息可以从各种源提供给反映模块120,所述源包括编译时间的自动生成、手动生成、标准类型信息等等。
转换模块130在不同类型的对象之间进行转换。下面引用图2至4更详细地说明例子转换处理。在不同对象之间的转换可以是任意复杂的且包括中间对象的生成。此复杂度的部分包括基于对象内的数据及与对象关联的类型的模式进行转换。例如,执行哪一种转换取决于特定的对象类型或类型名称、对类型存在特定命名或类型的属性、存在有特定元数据与其关联的属性、和对象关联的对象名称,等等。可以延迟转换直到产生结果对象的以减少或避免缓冲需求,否则缓冲可能是转换一种对象为另一种对象所必须的。
产生模块140负责产生由序列化模块100生成的结果对象。在XML对象150的情况下,产生模块创建该对象-它对该对象产生适当的XML-并可以写对象到流中。在对象实例170的情况下,产生模块140实例化并产生该对象。
如上所示,序列化模块100也被称为序列化引擎。如图1所示,序列化引擎由几个模块的有序集合组成。这些模块一起负责所有的操作。单独的模块被称为类型桥,因为,如下面更详细的说明,模块从一种类型转换到另一种类型(或不同类型之间的桥)。类型桥允许在运行时间进行类型和实例转换和/或追踪有关被序列化、反序列化或转换的对象的信息。引用图2至图4,类型桥的有序集合被称为类型桥管道,并通常对应于转换模块130的有序集合。对每个由序列化引擎执行的操作,可以存在单独的类型桥管道。有序列化管道(如图2)、反序列化管道(如图3)、转换管道(如图4)、对象拷贝管道等等。在单独讨论图2至图4的每一个之前,在下面展示总地适用于所有三个图的信息。
对图2至图4中所示的例子管道,负责对象的序列化、反序列化和转换的代码(一个或多个模块)是作为多个预定义的类型桥来实现的。这些模块被放置在适当的管道中并在运行时间使用。(图1中的虚线用于表示在各种类型桥管道中使用的可用类型桥模块)。图1中所示的例子序列化引擎的公用应用编程接口(API)的大部分仅是这个管道预定义集合的包装。这展示了序列化引擎如何可扩展-序列化引擎是简单的抽象管道集合。特定逻辑的实际实现位于可以在任何时候被替换的可嵌入模块中。
对图2至图4中所示的例子类型桥管道,给定类型的类型桥能够转换三种类型的对象之一初始类型对象、中间类型对象和结果类型对象。在图4中,初始类型对象是管理的代码对象且结果类型对象是基于万维网联盟(W3C)Infoset标准的XML对象。在所有三个图中展示的中间类型对象或中间表示是序列化引擎中的结构并且,如下面更详细的说明,表示可扩展点。中间表示是基于不定类型的不定对象。这样,通过用不定类型存储有类型的数据并通过对该类型定义的行为操作存储的数据,不定类型定义行为和有类型的数据存储。
图2展示序列化有初始类型或格式210的内存中的初始对象240的例子类型桥200。(如在说明书和权利要求中所用,术语“类型”应被广义地解释并包括任何对象类型或格式)。使用标准例程,初始对象240被转换为有中间类型或格式220的中间表示260A。如下面更详细的说明,此中间类型是不定的,允许对象类型和对象数据两者被改变。然而,中间格式220和初始格式210也可以是相同、密切相关、有一些不同、完全不同等等。
定制扩展例程260转换初始对象240的中间表示260A为中间表示260B。此转换可以包括改变对象类型、对象名称、对象数据等等。定制扩展例程260一般地表示序列化引擎的运行时间扩展,特别地表示类型桥管道200。注意使用定制扩展例程260并不需要重新实现标准例程250,通常现有的序列化实现的情况下重新实现标准例程是必须的。
标准例程270转换中间表示260B为有结果类型或格式230的结果对象280。结果对象280适合于发送到远程位置,进行持续存储等等。因此,结果对象280的结果格式230包括广泛的数据类型。在此,如在本说明的其他部分中,对象类型、格式和表示为广义的术语,包括对象的总体类型和格式及可以包含在该对象内的类型、格式、名称和数据。
图3展示反序列化有初始类型或格式330的对象340的例子类型桥300。类似于上面的图2,标准例程350转换初始对象340为有中间类型或格式320的中间表示360A。定制扩展例程360转换中间表示360A为中间表示360B。注意,中间类型320表示一个或多个中间类型。因此,中间表示360A和中间表示360B可以为不同的类型,但仍然适当地被称为中间类型,尤其是相对于初始类型330和结果类型或格式310。
标准例程370转换中间表示360B为有结果类型310的结果对象380。因为类型桥管道360是用于反序列化的,结果对象380为实例化并产生的内存中的对象。如下面更详细的说明,类型桥300和实例化并产生对象实例的代码关联。此代码可以被称为实例工厂或书写器,或写工厂,并一般对应于图1中所示的产生模块140。
图4展示转换初始对象400为结果对象480的例子类型桥管道400。图4中的单个类型桥能够转换三种不同的对象类型或格式之一管理的代码/CLR格式化的对象410、中间/Flex格式化的对象420和Infoset/XML格式化的对象430。CLR表示通用语言运行时间并且是Microsoft的.NET管理的执行环境。在其他特性中,CLR的优点包括跨语言集成、跨语言出错处理等等。语言编译器产生说明类型、成员和引用的元数据。元数据和代码一起被存储在通用语言运行时间可移植执行文件中。当然,CLR只是管理的代码类型的一个例子。如图4所示,两个对象都可以为内存中的对象(如CLR格式化的对象)或,作为另外的选择,两者都可以为序列化的对象(如,Infoset格式化的对象)。换句话说,初始对象和结果对象两者可以是同一类型的。
CLR对象410是包含数据和行为的CLR类型的实例,虽然只有数据和序列化目的相关。如上所示,根据由数据节点的预定义集合用特定语法组成的树结构的W3C标准来格式化Infoset对象或表示430。Flex对象420是序列化引擎内的结构并表示该序列化器的可扩展点。
Flex对象为基于不定类型的不定对象。不定类型也称为Flex类型。在图4中展示的例子类型桥管道400中,Flex类型和它对应的CLR类型起同样的作用定义行为和类型数据存储。类似地,Flex对象和CLR对象起通用的作用存储有类型的数据并通过对该类型定义的行为操作此数据。使用Flex类型的原因是CLR类型不是不定的。
对图4中所示的例子类型桥管道,对可以被序列化的类型进行特定限制以支持简单性和可扩展性。这些限制减少了序列化器需要识别的不同模式和组合的数量以序列化和反序列化给定的类型。在这一点,序列化引擎只需要知道如何序列化其类型符合所谓的核心模型的CLR对象。符合核心模型的类型必须将它们的数据作为属性(或字段)暴露或实现特殊的接口(该接口定义明确的读和写方法)。另外,这些类型需要提供公用的缺省构造函数。不符合核心模型的类型不能被序列化。
Flex类型和Flex对象被用于改变给定CLR对象的形状(成员、接口等)以符合所述核心模型。对给定的CLR对象,Flex类型可以被构建为除了该实例的CLR类型还暴露不同的成员集合和类型信息。基于Flex类型的Flex对象可以被实例化为代理特定的对CLR对象自身的调用。Flex对象也可以对CLR对象内的数据执行可选的转换,或者在代理前,或者在代理后。因此,可以用各种方法暴露CLR对象内的数据,包括符合核心模型的方法。因此,类型桥可以开始于对象不符合核心模型的类型并产生符合核心模型的对象类型。
类型桥可以用各种方法转换CLR对象、Flex对象和Infoset表示。任何给定的类型桥都有所操作的输入类型和所产生或生成的输出类型。此输出被传递给管道中的下一个类型桥。对例子类型桥管道400,允许进行下面的转换输入类型 输出类型 说明CLR CLR 转换CLR对象为新的CLR对象CLR Flex 转换CLR对象为Flex对象CLR Infoset 转换CLR对象为Infoset对象Flex Flex 转换Flex对象为新的Flex对象Flex CLR 转换Flex对象为CLR对象Flex Infoset 转换Flex对象为Infoset对象Infoset Infoset 转换Infoset对象为新的Infoset对象Infoset Flex 转换Infoset对象为Flex对象Infoset CLR 转换Infoset对象为CLR对象创建类型桥的不同分类以提供序列化引擎的基本操作。(虽然图2和3引用通用的类型,用下面在图4中展示的特定的类型引用这些图以提供进一步的上下文。
1.序列化转换CLR对象为Infoset对象或表示。为了执行此操作,存在包括一个CLR到Flex类型桥(如标准例程250)、任何数量的Flex到Flex类型桥,和一个Flex到Infoset类型桥(如标准例程270)的类型桥管道(如图2中所示)。
2.反序列化转换Infoset表示为CLR对象。为了执行此操作,存在包括一个Infoset到Flex类型桥(如标准例程350)、任何数量的Flex到Flex类型桥,和一个Flex到CLR类型桥(如标准例程370)的类型桥管道(如图2中所示)。
3.对象拷贝被用来创建CLR对象的深层拷贝。为了执行此操作,存在包括CLR到CLR类型桥的类型桥管道。
4.对象转换(图4)创建单个或多个CLR对象(初始对象440)的深层拷贝(结果对象480),而对实例数据(中间表示460A和460B)执行可选的转换(标准或定制扩展例程)。为了执行此操作,存在包括一个CLR到Flex类型桥(标准或定制例程450)、一个或多个可选的执行转换的Flex到Flex类型桥(标准或定制扩展例程460),和一个Flex到CLR类型桥(标准或定制例程470)的类型桥管道。
5.Infoset转换创建Infoset的拷贝并可选地对其进行转换。类似于对象拷贝,为了执行此操作,存在包括Infoset到Infoset类型桥的类型桥管道。
最后三个选项由于它们的实现方式而值得注意。尽管其他实现缓冲对象或Infoset数据,本发明的实施例可能延迟转换来避免或减少缓冲的需求。因此,可以显著地改善性能和资源管理。
为了支持上述操作,序列化引擎提供执行适当转换的常用或基本类型桥。在图4中,标准或定制例程450、460和470的任何一个都可以为常用类型桥或定制的替换。使用可扩展的配置机制,适当的类型桥在运行时间被识别出并装载到管道中。序列化引擎使用这些常用管道来执行请求的操作。然而,常用类型桥可以在任何时候被替换,因为引擎使用抽象类型桥的概念,而非具体的常用实现。在一个例子实施例中,管道简单地包括用于该管道的类型桥的列表-改变该列表改变该管道。对此例子实施例,一旦对一个对象调用特殊的类型桥,就不对该对象调用其他类型桥。
注意在例子实施例中,CLR 410、Flex 420和Infoset 430对应于如图2所示的序列化的初始格式210、中间格式220和结果格式230,并对应于如图3所示的反序列化的结果类型310、中间类型320和初始类型330。Flex对象是CLR和Infoset两者之间的中间类型。在此例子实施例中,类型桥不能进行从CLR到Infoset或相反的直接转换。和其他特性一起,这帮助简化例子序列化引擎。虽然序列化引擎的基本功能或操作是由常用类型桥定义的,有开发者可能需要的很多附加特性(如支持遗留编程模型)。本可以定义常用类型桥来实现这些特性,然而,有几个常用Flex到Flex类型桥来满足此目的。此方法确保常用类型桥是简单和可扩展的。因此,不同的开发者可以对标准特性进行修改并提供他们自己的新特性。
对此例子实施例,考虑称为Person、有两个属性FirstName和LastName的CLR类型的序列化处理。为了序列化此类型的实例(参见图2),需要有常用CLR到Flex和Flex到Infoset类型桥的管道。序列化引擎向CLR到Flex类型桥传递Person实例。此类型桥返回基于Person实例的新的Flex对象实例并代理Person实例。然后Flex对象被传递给Flex到Infoset类型桥。
Flex到Infoset类型桥负责转换或变换Flex对象为Infoset表示。在转换前,常用Flex到Infoset类型桥确定映射Flex对象的结构到Infoset的方式。此例中的常用实现使用大纲语言并用以该语言定义的结构定义映射。由于类型桥是可替换的,可以引入包括支持新大纲语言的新映射机制,它表示序列化引擎内的另一个可扩展点。一旦映射处理完成,Flex对象被转换为Infoset表示,Infoset表示被写入流。
如上简述,序列化引擎内的类型桥被连接到书写器工厂。书写器工厂负责创建能够写数据的资源。虽然该资源可以写数据到任何目标,最常见的目标是数据流(在用于的序列化之后)和CLR对象(在反序列化之后)。此例子实施例的常用书写器工厂返回写到用户提供的数据流的资源。此工厂生成的资源可以用任何它所需的格式写数据流。这样,并不限于XML序列化格式,这使书写器工厂可被替换并带来序列化引擎内的又一个可扩展点。
在此例子实施例中的Infoset表示的反序列化(例如,参考图3)包括包含常用Infoset到Flex和Flex到CLR类型桥的管道。序列化引擎传递用户提供的表示源Infoset和CLR类型(Person)流,CLR类型被反序列化到第一种类型桥(Infoset到Flex)。此类型桥基于代理流的Person类型创建新的Flex对象实例。结果Flex对象被传递给Flex到CLR类型桥,此类型桥用来自Flex对象的数据产生Person的实例(该Flex对象实际上在流中,因为Flex是代理)。如对序列化那样,反序列化管道以书写器工厂结束。反序列化的常用书写工厂负责创建被反序列化的CLR类型的实例。
除了序列化和反序列化,可能需要转换Person类型。如上所示,Person类型的形状包括两个属性FirstName和LastName。例如,假设使用Person的这个定义的应用和使用不同的Person定义的另一个应用(如有一个属性Fullname的Person)交互。虽然一种选择是让两个应用使用同样的Person类型,但这并不总是可能的(也许两个应用都已被写出)。
根据所述的例子实施例,可以创建转换Person实例在一个应用中的形状为另一个应用中所需的形状的类型桥。为了进行转换(见图2),需要构建新的Flex到Flex类型桥(如定制扩展例程260)并将其放置在序列化管道中的常用CLR到Flex类型桥(如标准例程250)之后。在此序列化处理中,向这个类型桥传递代理Person实例的Flex对象。此类型桥构建有不同的形状(单个FullName属性)新的Flex类型。基于此Flex类型,创建新的Flex对象,它连接初始Flex对象(它也代理Person实例)的FirstName和LastName属性。这个Flex对象被传递给常用Flex到Infoset类型桥(如,标准例程270),该类型桥序列化一个属性而不是两个。值得注意连接实际上没有被执行,直到Flex到Infoset类型桥请求新的FullName属性的值。因此,转换被延迟,直到创建Infoset或结果对象。
因此,符合本发明的序列化引擎可以提供在系统和类型之间进行转换的可扩展架构,这包括支持可嵌入的类型和数据转换、支持不定的类型和对象、支持可嵌入的大纲类型系统、支持可嵌入的数据格式等等。
也可以用包括功能步骤和/或非功能动作的方法来说明本发明。下面是执行以用于实现本发明的动作和步骤的说明。通常功能步骤以所实现的结果说明本发明,而非功能动作说明实现特定结果的特定动作。虽然功能步骤和非功能步骤可以用特殊的顺序来说明或请求,本发明并不限于任何动作和/或步骤的特殊顺序或组合。
图5A至图5B展示符合本发明的序列化和反序列化对象的方法的例子动作和步骤,它可以包括接收由序列化引擎在运行时间处理的初始类型的初始对象的动作(512)。识别初始对象的类型信息的步骤(520)可以包括接收类型信息的动作(522)。类型信息可以作为和管理的代码关联的元数据提供。基于初始类型信息转换初始对象为中间表示的步骤(530)可以包括基于类型信息产生(未标出)中间表示和调用(532)一个或多个定制扩展例程并调用(534)一个或多个标准例程来修改中间表示的动作。一个或多个扩展例程更改序列化引擎的运行时间操作。
应注意中间表示可以包括对象名称、对象类型和/或对象数据。虽然未示出,修改中间表示的步骤(540)也可以包括调用(未标出)一个或多个定制扩展例程和调用(未标出)一个或多个标准例程来修改中间表示的动作。修改中间表示的步骤(540)可以进一步包括更改对象名称、类型和/或数据的动作(540)。延迟修改的步骤(550)可以包括指定如何修改中间表示,而无需实际上修改中间表示的动作(552)延迟有助于减少和在内存中修改中间结果关联的缓冲和处理需求。
转换初始对象的中间表示为有结果类型或格式的结果对象的步骤(560)可以包括下面的动作。当序列化时(563),步骤可以包括创建或产生结果对象的动作(565)。在一个例子实施例中,如上所述结果对象被格式化为XML以进行传输。创建或产生结果对象(565)从而可以包括产生适当的XML并将结果对象写入流。另外,结果对象可以被格式化以持续存储在硬盘上或格式化为任何其他适合于表示序列化的初始对象的格式。当反序列化时(564),步骤可以包括实例化(566)和创建(568)结果对象的动作。在转换的步骤中(560),调用定制扩展和标准例程进行任何延迟的修改,延迟的修改指示应如何进行更改但实际上不做出更改。
本发明范围内的实施例也包括承载或包含计算机可执行指令或存储于其上的数据结构的计算机可读媒体。这样的计算机可读媒体可以为能由通用或专用计算机访问的任何可用媒体。作为例子,而非限制,这样的计算机可读媒体包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备,或可以用于承载或存储形式为计算机可执行指令或数据结构并且可以由通用或专用计算机访问的所需程序代码方法的任何其他媒体。当通过网络或其他通讯连接传输(有线、无线或两者的组合)或提供信息到计算机时,计算机正确地视该连接为计算机可读媒体。因此,任何这样的连接都被正确地称为计算机可读媒体。上述的组合也可以包括在计算机可读媒体的范围内。计算机可执行指令包括,例如,使通用计算机、专用计算机或专用处理设备执行特定功能或功能组的指令和数据。
图6和下面的说明旨在提供对在其中可以实现本发明的适合的计算环境的简短的总体说明。虽然不是必须的,本发明可以在计算机可执行指令的一般性上下文中进行说明,如由网络环境中的计算机执行的程序模块。通常,程序模块包括执行特殊任务或实现特殊抽象数据类型的例程、程序、对象、组件、数据结构等等。计算机可执行指令、关联的数据结构及程序模块代表执行在此揭示的方法的步骤的程序代码方法的例子。这样的可执行指令的特殊序列或关联的数据结构代表对应的实现以这样的步骤说明的功能的动作的例子。
熟悉技术的人应理解,本发明可以实现在由多种计算机系统配置的网络计算环境中,多种计算机系统配置包括个人计算机、手持设备、多处理器系统、基于微处理器的或可编程的消费者电子设备、网络PC、小型机、大型机等等。本发明也可以实现在分布式计算环境中,其中任务由本地和通过通讯网络(通过有线连接、无线连接、或有线或连接的组合)连接的远程处理设备执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备。
参考图6,用于实现本发明的例子系统包括形式为常规计算机620的通用计算设备,它包括处理单元621、系统存储器622和将包括系统存储器622的各种系统组件连接到处理单元的系统总线623。系统总线可以为几种类型的总线结构之一,包括存储器总线或存储器控制器、外围总线和使用多种总线结构之一的本地总线。系统存储器包括只读存储器(ROM)624和随即访问存储器(RAM)625。基本输入/输出系统(BIOS)626可以被存储在ROM 624内,它包含帮助在计算机620内的元件之间传输信息,如在启动时,的基本例程。
计算机620也可以包括读写磁硬盘639的磁硬盘驱动器627、读写可移动磁盘629的磁盘驱动器628和读或写如CD-ROM或其他光学媒体这样的可移动光盘631的光盘驱动器630。磁硬盘驱动器627、磁盘驱动器628和光盘驱动器630分别通过硬盘驱动器接口632、磁盘驱动器接口633和光盘驱动器接口634连接到系统总线623。驱动器及与其关联的计算机可读媒体对计算机620提供计算机可执行指令、数据结构、程序模块和其他数据的非易失存储。虽然在此所述的典型环境使用磁硬盘639、可移动磁盘629和可移动光盘631,可以使用其他类型的计算机可读媒体来存储数据,包括盒式磁带、闪存卡、数字多用途盘、伯努利盒、RAM、ROM等等。
程序代码方法包括可以被存储在硬盘639、磁盘629、光盘631、ROM 624或RAM 625上的一个或多个程序模块,包括操作系统635、一个或多个应用程序636、其他程序模块637和程序数据638。用户可以通过键盘640、定点设备642或其他输入设备(未标出),如麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等来输入命令和信息到计算机620中。这些和其他输入设备通常通过连接到系统总线623的串行口接口656连接到处理单元621。另外,输入接口可以通过其他接口连接,如并行口、游戏口或通用串行总线(USB)。监视器847或另一个显示设备也通过接口,如视频接口68连接到系统总线623。除了监视器,个人计算机通常包括其他外围输出设备(未标出),如扬声器和打印机。
计算机620可以使用到一个或多个远程计算机,如远程计算机649a和649b的逻辑连接工作在联网环境中。远程计算机649a和649b的每一个都可以为个人计算机、服务器、路由器、网络PC、对等设备或其他普通网络节点,并通常包括上述相对于计算机620说明的很多或所有元件,虽然在图6中只展示了存储器存储设备650a和650b及与其关联的应用程序636a和636b。在图6中所示的逻辑连接包括局域网(LAN)651和广域网(WAN)652,在此作为例子展示,而非限制。这样的联网环境在办公室范围或企业范围的计算机网络、企业内部互联网和因特网中是很常见的。
当用在LAN联网环境中时,计算机620通过网络接口或适配器653连接到本地网络651。当用在WAN联网环境中时,计算机620可以包括调制解调器654、无线连接或在广域网652,如因特网上建立通讯的其他方法。调制解调器654可以为内置的或外置的,通过串行口接口656连接到系统总线623。在联网的环境中,相对于计算机620说明的程序模块,或其部分,可以被存储在远程存储器存储设备。应理解,所示的网络连接是示范性的且可以使用通过广域网652建立通讯的其他方法。
本发明可以用其他具体形式实现而不偏离其精神或本质特征。所述的实施例应被视为在所有的方面都是说明性的,而不是限制性的。因此,本发明的范围由后附的权利要求而非上述的说明来指明。落在权利要求的等价意义和范围内的所有的更改包括在本发明的范围之内。
权利要求
1.在包括能够序列化和反序列化各种类型数据对象的可扩展序列化引擎的计算系统中,转换初始类型的初始对象为结果类型的结果对象的方法,其中所述方法允许运行序列化引擎的运行时间操作由一个或多个扩展例程更改,而无需替换序列化引擎的整体实现,所述方法包括动作接收初始类型的初始对象由序列化引擎在运行时间进行处理;接收初始类型的初始对象的类型信息;基于所述类型信息,产生初始对象的中间表示,所述中间表示适合于进行运行时间修改;调用一个或多个定制扩展例程来改变初始对象的所述中间表示,从而更改序列化引擎的运行时间操作;及通过初始对象修改的中间表示,产生结果类型的结果对象。
2.如权利要求1所述的方法,其特征在于,所述中间表示包括初始对象的整体类型,和包含在初始对象内的一个或多个对象的对象名称、对象类型和对象数据。
3.如权利要求2所述的方法,其特征在于,进一步包括改变整体对象类型和包含在初始对象内的一个或多个对象的对象名称、对象类型和对象数据中的至少一个的动作。
4.如权利要求1所述的方法,其特征在于,进一步包括调用一个或多个标准例程来修改初始对象的中间表示的动作。
5.如权利要求1所述的方法,其特征在于,所述修改初始对象的中间表示基于所述类型信息内的特殊模式。
6.如权利要求1所述的方法,其特征在于,所述修改初始对象的中间表示基于初始对象内的对象数据。
7.如权利要求1所述的方法,其特征在于,所述序列化引擎是分布式应用的消息系统的部分,所述应用程序发送和接收一个或多个消息,且所述初始对象和结果对象表示消息的至少部分。
8.如权利要求1所述的方法,其特征在于,所述初始对象包括内存中的对象,及所述序列化引擎序列化用于初始对象来产生结果对象。
9.如权利要求1所述的方法,其特征在于,所述结果对象包括基于初始对象进行实例化和产生的内存中的对象,及所述序列化引擎用于反序列化初始对象来产生结果对象。
10.如权利要求1所述的方法,其特征在于,调用所述一个或多个定制扩展例程来改变所述中间表示,所述定制扩展例程指定如何改变中间表示,而无需实际上改变中间表示,以使得中间表示中的改变得到延迟,直到产生结果对象,以减少缓冲的需求。
11.对包括能够序列化和反序列化各种类型数据对象的可扩展序列化引擎的计算系统,计算机程序产品包括一个多多个计算机可读媒体,所述计算机可读媒体承载计算机可执行指令,所述计算机可执行指令实现转换初始类型的初始对象为结果类型的结果对象的方法,其中所述方法允许运行序列化引擎的运行时间操作由一个或多个扩展例程更改,而无需替换序列化引擎的整体实现,所述方法包括动作接收初始类型的初始对象由序列化引擎在运行时间进行处理;接收初始类型的初始对象的类型信息;基于所述类型信息,产生初始对象的中间表示,所述中间表示适合于进行运行时间修改;调用一个或多个定制扩展例程来改变初始对象的所述中间表示,从而更改序列化引擎的运行时间操作;及通过初始对象修改的中间表示,产生结果类型的结果对象。
12.如权利要求11所述的计算机程序产品,其特征在于,所述中间表示包括初始对象的整体类型,和包含在初始对象内的一个或多个对象的对象名称、对象类型和对象数据。
13.如权利要求12所述的计算机程序产品,其特征在于,所述方法进一步包括改变整体对象类型和包含在初始对象内的一个或多个对象的对象名称、对象类型和对象数据中的至少一个的动作。
14.如权利要求11所述的计算机程序产品,其特征在于,所述方法进一步包括调用一个或多个可替换的标准例程来修改初始对象的中间表示的动作。
15.如权利要求11所述的计算机程序产品,其特征在于,所述修改初始对象的中间表示基于所述类型信息内的特殊模式、元数据和初始对象内的对象数据之一。
16.如权利要求11所述的计算机程序产品,其特征在于,其中如果初始对象包括内存中的对象,则所述序列化引擎用于序列化初始对象来产生结果对象,且如果结果对象包括基于初始对象进行实例化并产生的内存中的对象,则所述序列化引擎用于反序列化初始对象来产生结果对象。
17.如权利要求11所述的计算机程序产品,其特征在于,所述初始对象和结果对象两者均为内存中的对象。
18.如权利要求11所述的计算机程序产品,其特征在于,调用所述一个或多个定制扩展例程来改变所述中间表示,所述定制扩展例程指定如何改变中间表示,而无需实际上改变中间表示,以使得中间表示中的改变得到延迟,直到产生结果对象,以减少缓冲的需求。
19.在包括序列化和反序列化各种类型数据对象的可扩展序列化引擎的计算系统中,转换初始类型的初始对象为结果类型的结果对象的方法,其中所述方法允许运行序列化引擎的运行时间操作由一个或多个扩展例程更改,而无需替换序列化引擎的一个或多个其他现有例程,所述方法包括步骤识别接收用于由序列化引擎在运行时间进行处理的初始类型的初始对象的类型信息;基于所述类型信息,转换初始对象为初始对象的中间表示,所述中间表示适合于运行时间修改;根据一个或多个扩展例程修改初始对象的中间表示,从而更改序列化引擎的运行时间操作;及转换初始对象的中间表示为结果类型的结果对象。
20.如权利要求19所述的方法,其特征在于,所述初始对象的中间表示至少包括对象名称、对象类型和对象数据中的一个。
21.如权利要求20所述的方法,其特征在于,所述根据一个或多个扩展例程修改初始对象的中间表示的步骤,包括至少修改对象名称、对象类型和对象数据中的一个。
22.如权利要求19所述的方法,其特征在于,进一步包括根据序列化引擎内的一个或多个标准例程修改初始对象的中间表示的步骤。
23.如权利要求19所述的方法,其特征在于,所述修改初始对象中间表示基于类型信息内的特殊模式、初始对象内的对象数据,或两者。
24.如权利要求19所述的方法,其特征在于,所述初始对象包括内存中的对象且序列化引擎序列化初始对象来产生结果对象。
25.如权利要求19所述的方法,其特征在于,所述初始对象和结果对象两者均为内存中的对象。
26.如权利要求19所述的方法,其特征在于,进一步包括延迟修改中间表示,直到中间表示被转换为结果对象,以避免对中间表示的修改进行缓冲的步骤。
27.对包括能够序列化和反序列化各种类型数据对象的可扩展序列化引擎的计算系统,计算机程序产品包括一个或多个计算机可读媒体,所述计算机可读媒体承载计算机可执行指令,所述计算机可执行指令实现转换初始类型的初始对象为结果类型的结果对象的方法,其中所述方法允许运行序列化引擎的运行时间操作由一个或多个扩展例程更改,而无需替换序列化引擎的一个或多个其他现有例程,所述方法包括动作识别接收用于由序列化引擎在运行时间进行处理的初始类型的初始对象的类型信息;基于所述类型信息,转换初始对象为初始对象的中间表示,所述中间表示适合于运行时间修改;根据一个或多个扩展例程修改初始对象的中间表示,从而更改序列化引擎的运行时间操作;及转换初始对象的中间表示为结果类型的结果对象。
28.如权利要求27所述的计算机程序产品,其特征在于,所述初始对象的中间表示至少包括对象名称、对象类型和对象数据中的一个。
29.如权利要求27所述的计算机程序产品,其特征在于,所述根据一个或多个扩展例程修改初始对象的中间表示的步骤,包括至少修改对象名称、对象类型和对象数据中的一个。
30.如权利要求27所述的计算机程序产品,其特征在于,进一步包括根据序列化引擎内的一个或多个标准例程修改初始对象的中间表示的步骤。
31.如权利要求27所述的计算机程序产品,其特征在于,所述修改初始对象中间表示基于类型信息内的特殊模式、初始对象内的对象数据,或两者。
32.如权利要求27所述的计算机程序产品,其特征在于,所述结果对象包括内存中的对象且反序列化引擎序列化初始对象来产生结果对象。
33.如权利要求27所述的计算机程序产品,其特征在于,所述初始对象和结果对象两者均为内存中的对象。
34.如权利要求27所述的计算机程序产品,其特征在于,进一步包括延迟修改中间表示,直到中间表示被转换为结果对象,以避免对中间表示的修改进行缓冲的步骤。
35.一种实现转换一个或多个初始类型的初始对象为一个或多个结果类型的结果对象的可扩展序列化引擎的计算机程序产品,其中可以更改运行序列化引擎的运行时间操作,而无需重新实现序列化引擎的现有部分,所述计算机产品包括一个或多个计算机可读媒体,所述计算机可读媒体承载形式为计算机模块的计算机可执行指令,所述程序模块包括运行时间可替换的反映模块,所述反映模块用于识别由序列化引擎接收在运行时间进行处理的初始类型的初始对象的类型信息;一个或多个运行时间可替换的转换模块,所述转换模块用于产生和基于所识别的类型信息修改初始对象的中间表示,其中一个或多个运行时间可替换的转换模块包括一个或多个更改序列化引擎的运行时间操作的扩展例程;及运行时间可替换的产生模块,所述产生模块用于通过由转换模块产生的中间表示创建结果类型的结果对象。
36.如权利要求35所述的计算机程序产品,其特征在于,所述中间表示包括初始对象的对象名称、对象类型和对象数据,以及任何包含在初始对象内的对象。
37.如权利要求35所述的计算机程序产品,其特征在于,所述一个或多个运行时间可替换的转换模块能够改变初始对象的对象名称、对象类型和对象数据以及任何包含在初始对象内的对象中的至少一个。
38.如权利要求37所述的计算机程序产品,其特征在于,所述一个或多个运行时间可替换的转换模块能够追踪有关初始对象的信息,而不修改中间表示。
39.如权利要求35所述的计算机程序产品,其特征在于,所述一个或多个运行时间可替换的转换模块包括一个或多个标准例程来修改中间表示。
40.如权利要求35所述的计算机程序产品,其特征在于,所述一个或多个运行时间可替换的转换模块能够基于类型信息内的特殊模式、初始对象内的对象数据,或两者来修改初始对象的中间表示。
41.如权利要求35所述的计算机程序产品,其特征在于,所述运行时间可替换的产生模块能够以可扩展标记语言(XML)格式创建结果对象。
42.如权利要求35所述的计算机程序产品,其特征在于,所述运行时间可替换的产生模块能够基于中间表示实例化并产生结果对象。
43.如权利要求35所述的计算机程序产品,其特征在于,所述一个或多个运行时间可替换的转换模块能够延迟对初始对象的中间表示的一个或多个修改,直到中间表示被转换为结果对象,以避免和对中间表示做出所述一个或多个修改关联的缓冲需求。
全文摘要
将一种类型的对象转换为另一种类型的对象而允许更改或定制转换处理的运行时间操作的方法、系统和计算机程序产品。转换可以在可扩展的序列化引擎之内进行,序列化引擎序列化、反序列化并转换各种类型的对象。序列化引擎的运行时间操作由实现所需定制或扩展的一个或多个扩展例程来更改,而无需替换其他现有的例程。基于对初始对象所识别的类型信息,将该对象转换为允许运行时间修改的中间表示,运行时间修改包括对象名称、对象类型和对象数据的修改。根据扩展例程修改初始对象的中间表示,所述扩展例程更改序列化引擎的运行时间操作,且所述中间表示被转换为结果对象和类型。
文档编号G06F12/00GK1534456SQ20041003232
公开日2004年10月6日 申请日期2004年3月26日 优先权日2003年3月26日
发明者S·H·法里斯, S H 法里斯, S·K·斯里尼瓦杉, 斯里尼瓦杉, N·H·杰沙南达尼, 杰沙南达尼, Y·E·克里斯腾森, 克里斯腾森, E·A·卡里提迪, 卡里提迪, D·M·普迪, 普迪 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1