CN103019689A - 通用的对象序列化的实现方法 - Google Patents
通用的对象序列化的实现方法 Download PDFInfo
- Publication number
- CN103019689A CN103019689A CN2012104759144A CN201210475914A CN103019689A CN 103019689 A CN103019689 A CN 103019689A CN 2012104759144 A CN2012104759144 A CN 2012104759144A CN 201210475914 A CN201210475914 A CN 201210475914A CN 103019689 A CN103019689 A CN 103019689A
- Authority
- CN
- China
- Prior art keywords
- serializing
- xml
- structure tree
- serialization
- character string
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明公开了一种通用的对象序列化的实现方法;包括对象序列化成XML文本内容以及序列化之后的XML文本内容还原成对象。本发明可以使用XML格式表示对象的序列化数据,可读性强,方便编辑。
Description
技术领域
本发明属于软件开发和算法领域。
背景技术
对象序列化技术,是将对象数据转换成另一种持久化数据形式的技术,转换之后的数据形式必须易于存储在外部介质上,或者易于使用网络进行传输。为了使得存储和传输后的数据能够再次变回内存中的对象,这样的转换必须是可逆的。对象序列化技术在数据的传输和存储过程中,引入了对象的抽象,使得这个过程更加直观,使用更加方便,因此对象序列化技术在面向对象的软件系统中使用非常广泛。
由于对象序列化技术使用的广泛性,很多的计算机语言都在语言层面,通过标准库的方式,提供对象序列化的功能的支持,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格式表示对象的序列化数据,可读性强,方便编辑。
本发明并不限于上文讨论的实施方式。以上对具体实施方式的描述旨在于为了描述和说明本发明涉及的技术方案。基于本发明启示的显而易见的变换或替代也应当被认为落入本发明的保护范围。以上的具体实施方式用来揭示本发明的最佳实施方法,以使得本领域的普通技术人员能够应用本发明的多种实施方式以及多种替代方式来达到本发明的目的。
Claims (3)
1.一种通用的对象序列化的实现方法;其特征在于,包括对象序列化成XML文本内容以及序列化之后的XML文本内容还原成对象。
2.如权利要求1所述的通用的对象序列化的实现方法;其特征在于,对象序列化成XML文本内容包括以下步骤:
将对象存放于对象仓库中;
调用对象,构建对象结构树;
序列化管理器将前序遍历对象结构树,对结构树的每个节点进行序列化操作,生成XML格式的字符串;
将XML字符串存储到XML文件中或者通过网络发送。
3.如权利要求1所述的通用的对象序列化的实现方法;其特征在于,序列化之后的XML文本内容,还原成对象包括以下步骤:
读取XML字符串;
根据XML字符串,构建对象结构树;
序列化管理器使用前序遍历的方式遍历对象结构树,根据模板对象,动态生成对象;
序列化管理器使用后续遍历的方式遍历对象结构树,填充对象数据;
序列化管理器使用后续遍历的方式遍历对象结构树,初始化对象数据;注册动态生成的对象到对象仓库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210475914.4A CN103019689B (zh) | 2012-11-21 | 2012-11-21 | 通用的对象序列化的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210475914.4A CN103019689B (zh) | 2012-11-21 | 2012-11-21 | 通用的对象序列化的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103019689A true CN103019689A (zh) | 2013-04-03 |
CN103019689B CN103019689B (zh) | 2017-02-15 |
Family
ID=47968328
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210475914.4A Active CN103019689B (zh) | 2012-11-21 | 2012-11-21 | 通用的对象序列化的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103019689B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103425632A (zh) * | 2013-08-30 | 2013-12-04 | 深圳市路畅科技股份有限公司 | 一种序列化的方法、装置及处理器 |
CN104391796A (zh) * | 2014-12-05 | 2015-03-04 | 上海斐讯数据通信技术有限公司 | 一种测试用例解析方法 |
CN104899316A (zh) * | 2015-06-17 | 2015-09-09 | 北京奇虎科技有限公司 | 游戏数据的序列化与反序列化处理方法及装置 |
CN105335156A (zh) * | 2015-10-22 | 2016-02-17 | 福建星网锐捷通讯股份有限公司 | 一种java对象序列化的方法以及系统 |
WO2016029788A1 (zh) * | 2014-08-29 | 2016-03-03 | 优视科技有限公司 | 序列化方法和装置、以及反序列化方法和装置 |
CN105787128A (zh) * | 2016-03-29 | 2016-07-20 | 四川秘无痕信息安全技术有限责任公司 | 一种恢复Java序列化文件数据的方法 |
CN105824638A (zh) * | 2016-03-17 | 2016-08-03 | 广州多益网络股份有限公司 | 一种将文档转换为可直接使用的游戏代码的方法及装置 |
CN106095698A (zh) * | 2016-06-03 | 2016-11-09 | 合网络技术(北京)有限公司 | 面向对象的缓存写入、读取方法及装置 |
CN107229670A (zh) * | 2017-04-10 | 2017-10-03 | 中国科学院信息工程研究所 | 基于Avro的通用数据序列化及反序列化方法 |
CN109117209A (zh) * | 2018-07-23 | 2019-01-01 | 广州多益网络股份有限公司 | 序列化和反序列化方法及装置 |
CN116126429A (zh) * | 2022-12-06 | 2023-05-16 | 谷斗科技(上海)有限公司 | 一种非数据类型对象的引用持久化及其恢复的方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109800057B (zh) * | 2019-01-18 | 2021-06-01 | 杭州复杂美科技有限公司 | 对象调用方法、设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1489495A2 (en) * | 2003-06-19 | 2004-12-22 | Microsoft Corporation | Modular object serialization architecture |
CN101739245A (zh) * | 2008-11-07 | 2010-06-16 | 武汉虹信通信技术有限责任公司 | Xml消息与c语言程序结构体转换的方法及装置 |
-
2012
- 2012-11-21 CN CN201210475914.4A patent/CN103019689B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1489495A2 (en) * | 2003-06-19 | 2004-12-22 | Microsoft Corporation | Modular object serialization architecture |
CN101739245A (zh) * | 2008-11-07 | 2010-06-16 | 武汉虹信通信技术有限责任公司 | Xml消息与c语言程序结构体转换的方法及装置 |
Non-Patent Citations (1)
Title |
---|
胡宏银 等: "VBA 中对象序列化方法的设计与实现", 《武汉化工学院学报》 * |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103425632A (zh) * | 2013-08-30 | 2013-12-04 | 深圳市路畅科技股份有限公司 | 一种序列化的方法、装置及处理器 |
CN103425632B (zh) * | 2013-08-30 | 2016-08-10 | 深圳市路畅科技股份有限公司 | 一种序列化的方法、装置及处理器 |
WO2016029788A1 (zh) * | 2014-08-29 | 2016-03-03 | 优视科技有限公司 | 序列化方法和装置、以及反序列化方法和装置 |
CN105446722A (zh) * | 2014-08-29 | 2016-03-30 | 优视科技有限公司 | 序列化方法和装置、以及反序列化方法和装置 |
CN105446722B (zh) * | 2014-08-29 | 2019-04-02 | 优视科技有限公司 | 序列化方法和装置、以及反序列化方法和装置 |
CN104391796A (zh) * | 2014-12-05 | 2015-03-04 | 上海斐讯数据通信技术有限公司 | 一种测试用例解析方法 |
CN104899316A (zh) * | 2015-06-17 | 2015-09-09 | 北京奇虎科技有限公司 | 游戏数据的序列化与反序列化处理方法及装置 |
CN105335156B (zh) * | 2015-10-22 | 2019-01-15 | 福建星网锐捷通讯股份有限公司 | 一种java对象序列化的方法以及系统 |
CN105335156A (zh) * | 2015-10-22 | 2016-02-17 | 福建星网锐捷通讯股份有限公司 | 一种java对象序列化的方法以及系统 |
CN105824638A (zh) * | 2016-03-17 | 2016-08-03 | 广州多益网络股份有限公司 | 一种将文档转换为可直接使用的游戏代码的方法及装置 |
CN105787128A (zh) * | 2016-03-29 | 2016-07-20 | 四川秘无痕信息安全技术有限责任公司 | 一种恢复Java序列化文件数据的方法 |
CN105787128B (zh) * | 2016-03-29 | 2019-04-23 | 四川秘无痕信息安全技术有限责任公司 | 一种恢复Java序列化文件数据的方法 |
CN106095698A (zh) * | 2016-06-03 | 2016-11-09 | 合网络技术(北京)有限公司 | 面向对象的缓存写入、读取方法及装置 |
CN106095698B (zh) * | 2016-06-03 | 2019-04-23 | 合一网络技术(北京)有限公司 | 面向对象的缓存写入、读取方法及装置 |
CN107229670A (zh) * | 2017-04-10 | 2017-10-03 | 中国科学院信息工程研究所 | 基于Avro的通用数据序列化及反序列化方法 |
CN109117209A (zh) * | 2018-07-23 | 2019-01-01 | 广州多益网络股份有限公司 | 序列化和反序列化方法及装置 |
CN109117209B (zh) * | 2018-07-23 | 2021-10-01 | 广州多益网络股份有限公司 | 序列化和反序列化方法及装置 |
CN116126429A (zh) * | 2022-12-06 | 2023-05-16 | 谷斗科技(上海)有限公司 | 一种非数据类型对象的引用持久化及其恢复的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103019689B (zh) | 2017-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103019689A (zh) | 通用的对象序列化的实现方法 | |
Hümmer et al. | XCube: XML for data warehouses | |
CN105760534B (zh) | 自定义的可序列化的数据结构、hadoop集群、服务器及其应用方法 | |
US8484231B2 (en) | System and method for data mapping and information sharing | |
CN102609255B (zh) | 一种Spring IOC配置文件的生成方法 | |
US20140012988A1 (en) | Provisioning computer resources on a network | |
CN107609302B (zh) | 一种产品工艺结构生成方法及系统 | |
CN102937992A (zh) | 一种基于Java与XML数据库的对象映射转换设计方法 | |
CN104408039B (zh) | 基于Hilbert曲线与R‑tree的HBase多维查询系统的构建及其查询方法 | |
CN103853775A (zh) | 一种基于多媒体数据转换数据存储格式的方法 | |
CN102999329B (zh) | 基于可扩展标记语言映射配置的活动目录接口开发方法 | |
CN105468793A (zh) | 一种仿真模型数据的自动化管理方法 | |
CN105550176A (zh) | 一种关系数据库与xml的基本映射方法 | |
US8661336B2 (en) | Mapping an object type to a document type | |
US9483476B2 (en) | System decommissioning through reverse archiving of data | |
CN101916260A (zh) | 一种灾害本体和关系数据库间语义映射构建的方法 | |
CN116610380A (zh) | 一种支持异构建模工具数据互操作性的SysML模型协同开发系统 | |
US11539594B2 (en) | Diagramming chlid nodes with multiple parent nodes | |
Wilde et al. | Document design matters | |
CN110134684B (zh) | 一种bim模型数据的数据库存储方法 | |
US8832180B2 (en) | Function module dispatcher | |
CN109992246A (zh) | 基于Web架构的海量网络大数据挖掘系统 | |
Shengqi et al. | A dynamic data storage architecture for saas | |
Engle et al. | The Case for NoSQL on a Single Desktop | |
CN103617182A (zh) | 一种基本亲缘关系数据库构建方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |