通用的对象序列化的实现方法技术

技术编号:8532520 阅读:197 留言:0更新日期:2013-04-04 15:20
本发明专利技术公开了一种通用的对象序列化的实现方法;包括对象序列化成XML文本内容以及序列化之后的XML文本内容还原成对象。本发明专利技术可以使用XML格式表示对象的序列化数据,可读性强,方便编辑。

【技术实现步骤摘要】
通用的对象序列化的实现方法
本专利技术属于软件开发和算法领域。
技术介绍
对象序列化技术,是将对象数据转换成另一种持久化数据形式的技术,转换之后的数据形式必须易于存储在外部介质上,或者易于使用网络进行传输。为了使得存储和传输后的数据能够再次变回内存中的对象,这样的转换必须是可逆的。对象序列化技术在数据的传输和存储过程中,引入了对象的抽象,使得这个过程更加直观,使用更加方便,因此对象序列化技术在面向对象的软件系统中使用非常广泛。由于对象序列化技术使用的广泛性,很多的计算机语言都在语言层面,通过标准库的方式,提供对象序列化的功能的支持,Java,C#,Python等等语言莫不如是。C++语言本身并没有在标准库中提供对象序列化的功能,如果需要使用C++语言实现对象序列化,开发者要么自己设计,要么使用第三方库。目前C++中使用比较广泛的对象序列化库包括MFC,boost::serialization等等。MFC库的对象序列化功能无法脱离MFC库单独使用,不具有可移植性,大大限制了它的适用范围,而且MFC库将对象序列化成二进制数据,不具有可读性,也无法进行手工编辑。另外,MFC库是一个相对古老的设计,用户需要定义很多宏,本身的使用不是很方便。boost::serialization库参照了MFC库序列化功能的实现,它同时改进了前者的很多缺点。它支持将对象序列化成字符串,写入XML文件,这使得手工编辑变的方便。但是它不支持对文件的加密功能。不管是MFC库,还是boost::serialization库,都仅仅是实现了对象的序列化功能,开发人员如如要使用这些库,必须自己去设计对象具体的外部表现形式。本专利技术提供了一个通用的对象序列化方法,并提供了支持这个方法的库的实现方法,开发人员可以方便的使用这个序列化方法和库,轻松的实现复杂的序列化功能。
技术实现思路
本专利技术所要解决的技术问题是提供一种通用的对象序列化的实现方法,它可以使用XML格式表示对象的序列化数据,可读性强,方便编辑。为了解决以上技术问题,本专利技术提供了一种通用的对象序列化的实现方法;包括对象序列化成XML文本内容以及序列化之后的XML文本内容还原成对象。本专利技术的有益效果在于:可以使用XML格式表示对象的序列化数据,可读性强,方便编辑。对象序列化成XML文本内容包括以下步骤:将对象存放于对象仓库中;调用对象,构建对象结构树;序列化管理器将前序遍历对象结构树,对结构树的每个节点进行序列化操作,生成XML格式的字符串;将XML字符串存储到XML文件中或者通过网络发送。序列化之后的XML文本内容,还原成对象包括以下步骤:读取XML字符串;根据XML字符串,构建对象结构树;序列化管理器使用前序遍历的方式遍历对象结构树,根据模板对象,动态生成对象;序列化管理器使用后续遍历的方式遍历对象结构树,填充对象数据;序列化管理器使用后续遍历的方式遍历对象结构树,初始化对象数据;注册动态生成的对象到对象仓库。附图说明下面结合附图和具体实施方式对本专利技术作进一步详细说明。图1描述了将C++语言中的对象序列化成XML文本内容的过程;图2描述了序列化之后的XML文本内容,还原成C++对象的过程。具体实施方式本专利技术解决现有的C++语言对象序列化库只提供序列化功能,而没有序列化方法的问题。本专利技术的序列化方法使用XML标记语言来作为对象的外部表示。对象的数据有属性和关联两种,不管是属性还是关联,都是对象的成员变量。对象的属性是指类型为方法所支持基本类型(下文会详细说明)的成员变量;对象的关联是指类型为某个C++类的成员变量,这个C++类也必须是可序列化的。对象的关联又分为两种,普通关联和引用关联。普通关联指成员变量的类型为类本身,引用关联指成员变量的类型为类指针。序列化方法除了支持单个的属性和关联以外,还支持属性列表和关联列表,以及属性字典和关联字典。关联列表和关联字典都是关联的容器,其中的元素既可以是普通关联,也可以是引用关联。关联字典的键值,必须是序列化方法所支持的基本类型中的一种。下面的表格说明了序列化方法的详细内容:序列化方法所支持的基本类型,就是属性所能使用的基本类型。基本类型在方法中定义了相应的字符串来表示,这些字符串可以出现在<attribute>元素的的“type”属性中,以及<attribute_map>元素和<association_map>元素的”key_type”属性中。关于基本类型的详细内容请参见下表:在支持该序列化方法的序列化库中,使用ISerialize接口表示可以被序列化和反序列化的对象,所有想使用序列化方法和序列化功能的对象都必须继承这个接口。继承了这个接口的对象将满足以下几个要求:1.拥有一个CName类型的名称,作为对象的标识符;2.拥有一个参数为CProtoType类型的构造函数,用于构造模板对象;3.拥有一个make()函数,用于动态创建新对象;4.拥有一个setObjectDefinition()方法,用于填充数据到CObjectDefinition对象;5.拥有一个getObjectDefinition()方法,用于从CObjectDefinition对象取得数据;6.拥有一个initialize()方法,用于在填充数据完成后,进行对象的初始化。序列化库将包括以下两个重要的部分:对象仓库和序列化管理器。对象仓库保存着对象的名称(CName类型)到对象本身的映射,使用对象仓库存储对象主要是为了支持引用关联。序列化管理器负责具体的序列化操作,同时存储着类型名到模板对象的映射,模板对象是为了在进行反序列的过程中,动态创建对象之用。序列化库使用以下的一组对象来描述一个C++对象的数据:1.CAttribute对象表示对象的属性;2.CAttributeList对象表示对象的属性列表;3.CAttributeMap对象表示对象的属性字典;4.CAssociation对象表示对象的关联;5.CAssociationList对象表示对象的关联列表;6.CAssociationMap对象表示对象的关联字典;7.CObjectDefinition表示对象本身。在序列化的过程中,任何一个需要进行序列化的C++对象,都可以转换成以上对象组成的一颗结构树。反之,在反序列化的过程中,XML字符串也将转换成结构树,进而再通过动态创建,还原成真正的C++对象。以上对象组成的结构树,是序列化和反序列化过程中的中间数据,也是整个序列化算法的核心。为了通过结构树创建C++对象或者XML元素,序列化库使用前序遍历的方式遍历结构树,而为了将结构树中CObjectDefinition的数据填充到C++对象中去,进而对对象进行初始化,序列化库使用后序遍历的方式遍历结构树,以保证对象成员的数据在对象之前被准备好。提供了一个成熟的易于使用的序列化方法。序列化方法使用XML格式表示对象的序列化数据,可读性强,方便编辑。本专利技术并不限于上文讨论的实施方式。以上对具体实施方式的描述旨在于为了描述和说明本专利技术涉及的技术方案。基于本专利技术启示的显而易见的变换或替代也应当被认为落入本专利技术的保护范围。以上的具体实施方式用来揭示本专利技术的最佳实施方法,以使得本领域的普通技术人本文档来自技高网
...
通用的对象序列化的实现方法

【技术保护点】
一种通用的对象序列化的实现方法;其特征在于,包括对象序列化成XML文本内容以及序列化之后的XML文本内容还原成对象。

【技术特征摘要】
1.一种通用的对象序列化的实现方法;其特征在于,包括对象序列化成XML文本内容以及序列化之后的XML文本内容还原成对象;XML标记语言作为对象的外部表示,对象数据有属性和关联两种,属性和关联都是对象的成员变量;对象的关联分为普通关联和引用关联,普通关联指成员变量的类型为类本身,引用关联指成员变量的类型为类指针;在支持通用的对象序列化的实现方法的序列化库中使用ISerialize接口表示可以被序列化和反序列化的对象;所述序列化库包括对象仓库和序列化管理器;对象仓库保存着对象的名称到对象本身的映射,使用对象仓库存储对象来支持引用关联;序列化管理器负责具体的序列化操作,同时存储着类型名到模板对象的映射,模板对象用于在进行反序列的过程中动态创建对象;对象序列化成XML文本内容包括以下步骤:将对象存放于对象仓库中;调用对象,构建对象结构树;序列化管理器将前序遍历对象结构树,对对象结构树的每个节点进行序列化操作,生成XML格式的字符串;...

【专利技术属性】
技术研发人员:朱建云巩荣海
申请(专利权)人:上海富欣智能交通控制有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1