CN103593194B - 对象序列化方法和装置 - Google Patents

对象序列化方法和装置 Download PDF

Info

Publication number
CN103593194B
CN103593194B CN201310596703.0A CN201310596703A CN103593194B CN 103593194 B CN103593194 B CN 103593194B CN 201310596703 A CN201310596703 A CN 201310596703A CN 103593194 B CN103593194 B CN 103593194B
Authority
CN
China
Prior art keywords
json
attribute
destination object
destination
converted
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.)
Active
Application number
CN201310596703.0A
Other languages
English (en)
Other versions
CN103593194A (zh
Inventor
池雷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Gridsum Technology Co Ltd
Original Assignee
Beijing Gridsum Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Gridsum Technology Co Ltd filed Critical Beijing Gridsum Technology Co Ltd
Priority to CN201310596703.0A priority Critical patent/CN103593194B/zh
Publication of CN103593194A publication Critical patent/CN103593194A/zh
Application granted granted Critical
Publication of CN103593194B publication Critical patent/CN103593194B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种对象序列化方法和装置。其中,对象序列化方法包括:获取目标对象;创建与目标对象对应的Json对象,Json对象为具有目标对象的属性的设置操作的类;将目标对象转化为Json对象;以及由Json对象生成目标对象的序列化字符串。通过本发明,使得序列化结果与目标对象结构之间不需要严格映射,可以灵活控制序列化结果。

Description

对象序列化方法和装置
技术领域
本发明涉及互联网领域,具体而言,涉及一种对象序列化方法和装置。
背景技术
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-2623rd Edition-December1999)脚本语言的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
序列化(Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。上述中的对象(Object)就是客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。
目前,针对不同的语言框架,对象的序列化通常使用语言框架内置的序列化类,对目标对象进行序列化。采用这种方式进行序列化,使得序列化结果必须与目标对象结构严格映射,无法满足灵活的序列化需求。
针对现有技术中序列化结果必须与目标对象结构严格映射,无法满足灵活的序列化需求的问题,目前尚未提出有效的解决方案。
发明内容
本发明的主要目的在于提供一种对象序列化方法和装置,以解决序列化结果必须与目标对象结构严格映射,无法满足灵活的序列化需求的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种对象序列化方法。根据本发明的对象序列化方法包括:获取目标对象;创建与目标对象对应的Json对象,Json对象为具有目标对象的属性的设置操作的类;将目标对象转化为Json对象;以及由Json对象生成目标对象的序列化字符串。
进一步地,目标对象的属性包括对象属性、数组属性和值属性中至少之一,其中,创建与目标对象对应的Json对象包括以下至少之一:创建与目标对象的属性对应的Json子对象,Json子对象为用于对对象属性进行序列化操作的类;创建与目标对象的属性对应的Json数组对象,Json数组对象为对数组属性进行序列化操作的类;以及创建与目标对象的属性对应的Json值对象,Json值对象为对值属性进行序列化操作的类。
进一步地,目标对象包括子对象,在获取目标对象之后,对象序列化方法还包括:获取目标对象的子对象,其中,在将目标对象转化为Json对象之后,对象序列化方法还包括:将目标对象的子对象转化为Json子对象;将目标对象的子对象的数组属性转化为Json数组对象;将目标对象的子对象的值属性转化为Json值对象。
进一步地,在获取目标对象之后,对象序列化方法还包括:获取用户选择的目标对象的属性,其中,将目标对象转化为Json对象包括:由用户选择的目标对象的属性将目标对象转化为相应的Json对象。
进一步地,由Json对象生成目标对象的序列化字符串包括:将Json对象的Json值对象按照Json语法生成Json字符串;将Json对象的Json数组对象按照Json语法生成Json字符串;以及将目标对象的对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串。
为了实现上述目的,根据本发明的另一方面,提供了一种对象序列化装置。根据本发明的对象序列化装置包括:第一获取单元,用于获取目标对象;创建单元,用于创建与目标对象对应的Json对象,Json对象为具有目标对象的属性的设置操作的类;第一转化单元,用于将目标对象转化为Json对象;以及生成单元,用于由Json对象生成目标对象的序列化字符串。
进一步地,目标对象的属性包括对象属性、数组属性和值属性中至少之一,其中,创建单元包括以下至少之一:第一创建模块,用于创建与目标对象的属性对应的Json子对象,Json子对象为用于对对象属性进行序列化操作的类;第二创建模块,用于创建与目标对象的属性对应的Json数组对象,Json数组对象为对数组属性进行序列化操作的类;以及第三创建模块,用于创建与目标对象的属性对应的Json值对象,Json值对象为对值属性进行序列化操作的类。
进一步地,目标对象包括子对象,对象序列化装置还包括:第二获取单元,用于在获取目标对象之后,获取目标对象的子对象,其中;以及第二转化单元,用于在在将目标对象转化为Json对象之后,将目标对象的子对象转化为Json子对象,将目标对象的子对象的数组属性转化为Json数组对象,将目标对象的子对象的值属性转化为Json值对象。
进一步地,对象序列化装置还包括:第三获取单元,用于在获取目标对象之后,获取用户选择的目标对象的属性,其中,第一转化单元包括:转化模块,用于由用户选择的目标对象的属性将目标对象转化为相应的Json对象。
进一步地,生成单元包括:第一生成模块,用于将Json对象的Json值对象按照Json语法生成Json字符串;第二生成模块,用于将Json对象的Json数组对象按照Json语法生成Json字符串;以及第三生成模块,用于将目标对象的对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串。
通过本发明,采用对象序列化方法,其特征在于,包括:获取目标对象;创建与目标对象对应的Json对象,Json对象为具有目标对象的属性的设置操作的类;将目标对象转化为Json对象;以及由Json对象生成目标对象的序列化字符串,通过创建与目标对象对应的Json对象,并将目标对象转化为该Json对象,由Json对象生成目标对象的序列化字符串,从而实现对目标对象的序列化,由于Json对象生成过程由开发者完成,开发者决定目标对象的哪些成员参与Json生成并构建对应的Json对象,使得序列化结果与目标对象结构之间不需要严格映射,因此可以灵活控制序列化结果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明第一实施例的对象序列化装置的结构示意图;
图2是根据本发明第二实施例的对象序列化装置的结构示意图
图3是根据本发明第一实施例的对象序列化方法的流程图;以及
图4是根据本发明第二实施例的对象序列化方法的流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供了一种对象序列化装置,该装置可以通过计算机设备实现其功能。
图1是根据本发明第一实施例的对象序列化装置的结构示意图。如图1所示,该对象序列化装置包括:第一获取单元10、创建单元20、第一转化单元30和生成单元40。
第一获取单元10用于获取目标对象。
目标对象为客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。例如,当对象为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值,从而通过计算机语言表示客观世界中存在的人、事、物体等实体。目标对象可以是任意的客观世界中存在的人、事、物体等实体,这里的目标对象可以是用户输入的需要进行序列化的对象。
创建单元20用于创建与目标对象对应的Json对象,Json对象为具有目标对象的属性的设置操作的类。
Json对象为具有目标对象的属性的设置操作的类,这里的类(Class)是面向对象程序设计语言中的一个概念。实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。一个类定义了一组对象。类具有行为(be-havoir),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。
类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。类通过接口与外界发生关系。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都像一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值(value)。
创建的Json对象可以对目标对象的属性进行设置操作,以及生成目标对象对应的Json字符串的方法,也即是在Json对象中封装了序列化生成字符串的这一过程。Json对象的类可以是Json对象,也可以是Json值或Json数组,其中,Json值也为一个类,继承Json对象,Json值的类可以用于将一个基本类型的属性值包装成一个Json值对象,提供一个带参数的构造函数,以及生成Json字符串的方法。Json数组也为一个类,用于提供添加方法添加Json值或者Json对象也可以是Json数组,以及生成Json字符串的方法。例如,当目标对象为“王刚”时,目标对象“王刚”符合人的定义,则其属性包括“姓名”、“年龄”、“性别”和“职务”等,由于人的职务可以有很多,因此“姓名”、“年龄”、“性别”可以是目标对象“王刚”的值属性,“职务”可以是目标对象“王刚”的数组属性,创建的Json对象可以对目标对象“王刚”的属性进行相应的设置操作,从而进行相应的序列化。
当然,目标对象的属性为空时,通过本发明实施例的Json对象也可以将其转化为相应的序列化字符串。
第一转化单元30用于将目标对象转化为Json对象。
目标对象为需要进行序列化的对象,由于Json对象中具有生成Json字符串的方法,因此,将被序列化的目标对象转化为Json对象,即,将目标对象映射为Json对象,可以使用Json对象完成目标对象的序列化。将目标对象转化为Json对象可以是将目标对象的属性转化为相应的Json对象,例如,当目标对象的属性包括值属性和数组属性,则可以将目标对象的值属性转化为Json值对象,将的数组属性转化为Json数组对象。目标对象的属性还可以是对像,由于目标对象的对象属性也为对象,因此将目标对象的对象属性转化为Json对象。
生成单元40用于由Json对象生成目标对象的序列化字符串。
在将目标对象转化为Json对象之后,通过对Json对象进行序列化,生成序列化后的Json字符串,该Json字符串即为目标对象的序列化字符串。这样,通过对Json对象序列化实现对目标对象的序列化。
根据本发明实施例,通过创建与目标对象对应的Json对象,并将目标对象转化为该Json对象,由Json对象生成目标对象的序列化字符串,从而实现对目标对象的序列化,由于Json对象生成过程由开发者完成,开发者决定目标对象的哪些成员参与Json生成并构建对应的Json对象,使得序列化结果与目标对象结构之间不需要严格映射,因此可以灵活控制序列化结果。
优选地,目标对象的属性包括对象属性、数组属性和值属性中至少之一,其中,创建单元20包括第一创建模块、第二创建模块和第三创建模块中至少之一。
第一创建模块用于创建与目标对象的属性对应的Json子对象,Json子对象为用于对对象属性进行序列化操作的类。
由于Json对象和Json子对象都是对对象的进行属性设置的类,因此,Json子对象也可以称为Json对象,在实际应用中,直接将目标对象的对象属性转化为Json对象进行序列化。
第二创建模块用于创建与目标对象的属性对应的Json数组对象,Json数组对象为对数组属性进行序列化操作的类。
第三创建模块用于创建与目标对象的属性对应的Json值对象,Json值对象为对值属性进行序列化操作的类。
对象的属性可以是对象属性、数组属性和值属性,也即是目标对象的属性可以是对象,可以是数组,还可以是值,还可以是其中任意几个的组合,或者属性为空。例如,当目标对像为“王刚”,符合人的定义,其属性包括“姓名”、“年龄”、“性别”等属性,这些属性为值属性,则可以创建与目标对象对应的Json值对象以对目标对象的值属性进行转化;如果目标对像“王刚”还可以包括“职务”属性,则可以创建与目标对象对应的Json数组对象,对目标对象的数组属性进行转化;目标对像“王刚”还可以包括“配偶”属性,“配偶”为对象属性,可以称为目标对象的子对象,则创建与目标对象对应的Json子对象,对目标对象的对象属性进行转化。
根据本发明实施例,可以根据目标对象的不同属性,创建不同的Json对象(如Json子对象、Json数组对象和Json值对象等),对目标对象进行相应的序列化。当然,在目标对象的属性发生变化时,也可以根据变化后的属性创建相应的Json对象,从而使得转化后的Json对象可以是Json对象、Json数组对象和Json值对象中的任意几个的组合,因此可以灵活地对目标对象进行序列化,而不限定于目标对象的任何属性类型。
优选地,目标对象包括子对象,对象序列化装置还包括第二获取单元和第二转化单元。
第二获取单元用于在获取目标对象之后,获取目标对象的子对象。
目标对象的子对象可以是目标对象的对象属性对应的对象。例如,当目标对象为“王刚”时,可以包括“配偶”属性,其配偶为“李梅”,则“李梅”为目标对象“王刚”的子对象。由于子对象“李梅”具有多种属性,如“姓名”、“年龄”和“职务”等,因此,获取目标对象的子对象以便于对目标对象的子对象进行相应的递归序列化。
第二转化单元用于在在将目标对象转化为Json对象之后,将目标对象的子对象转化为Json子对象,将目标对象的子对象的数组属性转化为Json数组对象,将目标对象的子对象的值属性转化为Json值对象。
由于Json对象和Json子对象都是对对象的进行属性设置的类,因此,Json子对象也可以称为Json对象,在实际应用中,直接将目标对象的子对象转化为Json对象进行序列化。将目标对象的子对象转化为Json子对象可以是将目标对象的子对象转化为Json对象。相应地,目标对象的子对象可以包括数组属性,因此将数组属性转化为Json数组对象。相应地,目标对象的子对象可以包括值属性,因此将值属性转化为Json值对象。
需要说明的是,目标对象的子对象的属性还可以是包括对象属性、值属性和数组属性中的几种组合属性,则根据子对象的属性进行相应的转化。当然,目标对象的子对象还可以包括子对象,其子对象的处理同目标对象的子对象的处理相同。由此可以看出,可以通过本发明实施例的对象序列化方法对任意对象进行序列化并控制Json序列化生成的结果。
图2是根据本发明第二实施例的对象序列化装置的结构示意图。该实施例的对象序列化装置可以作为上述实施例的对象序列化装置的一种优选实施方式。如图2所示,该对象序列化装置包括:第一获取单元10、创建单元20、第一转化单元30、生成单元40和第三获取单元50,其中,第一转化单元30包括转化模块301。第一获取单元10、创建单元20和生成单元40与图1所示的第一获取单元10、创建单元20和生成单元40功能相同,这里不做赘述。
第三获取单元50用于在获取目标对象之后,获取用户选择的目标对象的属性。
由于目标对象包括多个属性,用户可以选择目标对象的任意的一些属性进行序列化,在获取目标对象之后,获取用户选择的目标对象的属性,以便于对目标对象进行序列化。
转化模块301用于由用户选择的目标对象的属性将目标对象转化为相应的Json对象。
在创建与目标对象对应Json对象之后,由目标对象的属性将目标对象转化为相应的Json对象。例如,目标对象的属性为值属性,则将值属性转化为Json值对象;目标对象的属性为数组属性,则将数组属性转化为Json数组对象;目标对象的属性为对象属性,则将对象属性转化为Json对象。
优选地,本发明实施例的生成单元40包括:第一生成模块、第二生成模块和第三生成模块。
第一生成模块用于将Json对象的Json值对象按照Json语法生成Json字符串。
将Json值对象按照Json语法生成Json字符串,可以是以键值对的方式生成Json字符串,例如,当目标对象为“王刚”时,其包含“姓名”属性,则通过Json值对象按照键值对的形式生成Json字符串为“‘姓名’:‘王刚’”,其中,‘姓名’为键,‘王刚’为值,中间以冒号隔开,从而生成了键值对的形式的Json字符串。
第二生成模块用于将Json对象的Json数组对象按照Json语法生成Json字符串。
将Json对象的Json数组对象按照Json语法生成Json字符串,并以键值的方式呈现在序列化后的字符串上。
例如,当对象为“李梅”时,其对应的属性为“职务”,该属性为数组,在转化的过程中将其转化后的字符串为“职务”:[“顾问”,”母亲”]。
第三生成模块用于将目标对象的对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串。
由于目标对象包括对象属性,其对象属性对应的对象还可以包括对象属性、值属性和数组属性,则对应的将对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串,并最终呈现在目标对象序列化后的字符串上。
例如,目标对象为“王刚”,其具有属性为“配偶”,该属性为对象属性,则转化后的字符串为“配偶”:{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}。
Json对象、Json值对象、Json数组对象在序列化期间,会生成不同格式的字符串。以属性名称做为键,冒号为分割,多个属性值以逗号区分。
目标对象(王刚)拥有5个属性,其中包含3个JSON值(姓名,年龄,性别),一个json数组(车辆),和一个Json对象(配偶),其中,目标对象“王刚”的配偶这个Json对象,结果为{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}。
得到最后结果:
{“姓名”:“王刚”,“年龄”:28,“性别”:“男”,“车辆”:[“桑塔纳2000”,“奥迪A6”,“幻影劳斯莱斯”],“配偶”:{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}}
本发明实施例还提供了一种对象序列化方法。该方法可以运行在对象序列化装置上。需要说明的是,本发明实施例的对象序列化方法可以通过本发明实施例所提供的对象序列化装置来执行,本发明实施例的对象序列化装置也可以用于执行本发明实施例所提供的对象序列化方法。
图3是根据本发明第一实施例的对象序列化方法的流程图。如图3所示,该对象序列化方法包括步骤如下:
步骤S101,获取目标对象。
目标对象为客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。例如,当对象为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值,从而通过计算机语言表示客观世界中存在的人、事、物体等实体。目标对象可以是任意的客观世界中存在的人、事、物体等实体,这里的目标对象可以是用户输入的需要进行序列化的对象。
步骤S102,创建与目标对象对应的Json对象,Json对象为具有目标对象的属性的设置操作的类。
Json对象为具有目标对象的属性的设置操作的类,这里的类(Class)是面向对象程序设计语言中的一个概念。实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。一个类定义了一组对象。类具有行为(be-havoir),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。
类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。类通过接口与外界发生关系。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都像一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值(value)。
创建的Json对象可以对目标对象的属性进行设置操作,以及生成目标对象对应的Json字符串的方法,也即是在Json对象中封装了序列化生成字符串的这一过程。Json对象的类可以是Json对象,也可以是Json值或Json数组,其中,Json值也为一个类,继承Json对象,Json值的类可以用于将一个基本类型的属性值包装成一个Json值对象,提供一个带参数的构造函数,以及生成Json字符串的方法。Json数组也为一个类,用于提供添加方法添加Json值或者Json对象也可以是Json数组,以及生成Json字符串的方法。例如,当目标对象为“王刚”时,目标对象“王刚”符合人的定义,则其属性包括“姓名”、“年龄”、“性别”和“职务”等,由于人的职务可以有很多,因此“姓名”、“年龄”、“性别”可以是目标对象“王刚”的值属性,“职务”可以是目标对象“王刚”的数组属性,创建的Json对象可以对目标对象“王刚”的属性进行相应的设置操作,从而进行相应的序列化。
当然,目标对象的属性为空时,通过本发明实施例的Json对象也可以将其转化为相应的序列化字符串。
步骤S103,将目标对象转化为Json对象。
目标对象为需要进行序列化的对象,由于Json对象中具有生成Json字符串的方法,因此,将被序列化的目标对象转化为Json对象,即,将目标对象映射为Json对象,可以使用Json对象完成目标对象的序列化。将目标对象转化为Json对象可以是将目标对象的属性转化为相应的Json对象,例如,当目标对象的属性包括值属性和数组属性,则可以将目标对象的值属性转化为Json值对象,将的数组属性转化为Json数组对象。目标对象的属性还可以是对像,由于目标对象的对象属性也为对象,因此将目标对象的对象属性转化为Json对象。
步骤S104,由Json对象生成目标对象的序列化字符串。
在将目标对象转化为Json对象之后,通过对Json对象进行序列化,生成序列化后的Json字符串,该Json字符串即为目标对象的序列化字符串。这样,通过对Json对象序列化实现对目标对象的序列化。
根据本发明实施例,通过创建与目标对象对应的Json对象,并将目标对象转化为该Json对象,由Json对象生成目标对象的序列化字符串,从而实现对目标对象的序列化,由于Json对象生成过程由开发者完成,开发者决定目标对象的哪些成员参与Json生成并构建对应的Json对象,使得序列化结果与目标对象结构之间不需要严格映射,因此可以灵活控制序列化结果。
优选地,目标对象的属性包括对象属性、数组属性和值属性中至少之一,其中,步骤S102包括以下至少之一:
步骤S11,创建与目标对象的属性对应的Json子对象,Json子对象为用于对对象属性进行序列化操作的类。由于Json对象和Json子对象都是对对象的进行属性设置的类,因此,Json子对象也可以称为Json对象,在实际应用中,直接将目标对象的对象属性转化为Json对象进行序列化。
步骤S12,创建与目标对象的属性对应的Json数组对象,Json数组对象为对数组属性进行序列化操作的类。
步骤S13,创建与目标对象的属性对应的Json值对象,Json值对象为对值属性进行序列化操作的类。
对象的属性可以是对象属性、数组属性和值属性,也即是目标对象的属性可以是对象,可以是数组,还可以是值,还可以是其中任意几个的组合,或者属性为空。例如,当目标对像为“王刚”,符合人的定义,其属性包括“姓名”、“年龄”、“性别”等属性,这些属性为值属性,则可以创建与目标对象对应的Json值对象以对目标对象的值属性进行转化;如果目标对像“王刚”还可以包括“职务”属性,则可以创建与目标对象对应的Json数组对象,对目标对象的数组属性进行转化;目标对像“王刚”还可以包括“配偶”属性,“配偶”为对象属性,可以称为目标对象的子对象,则创建与目标对象对应的Json子对象,对目标对象的对象属性进行转化。
根据本发明实施例,可以根据目标对象的不同属性,创建不同的Json对象(如Json子对象、Json数组对象和Json值对象等),对目标对象进行相应的序列化。当然,在目标对象的属性发生变化时,也可以根据变化后的属性创建相应的Json对象,从而使得转化后的Json对象可以是Json对象、Json数组对象和Json值对象中的任意几个的组合,因此可以灵活地对目标对象进行序列化,而不限定于目标对象的任何属性类型。
优选地,目标对象包括子对象,在步骤S101之后,对象序列化方法还包括:步骤S1011,获取目标对象的子对象。
目标对象的子对象可以是目标对象的对象属性对应的对象。例如,当目标对象为“王刚”时,可以包括“配偶”属性,其配偶为“李梅”,则“李梅”为目标对象“王刚”的子对象。由于子对象“李梅”具有多种属性,如“姓名”、“年龄”和“职务”等,因此,获取目标对象的子对象以便于对目标对象的子对象进行相应的递归序列化。
在步骤S103之后,对象序列化方法还包括:
步骤S1031,将目标对象的子对象转化为Json子对象。
由于Json对象和Json子对象都是对对象的进行属性设置的类,因此,Json子对象也可以称为Json对象,在实际应用中,直接将目标对象的子对象转化为Json对象进行序列化。将目标对象的子对象转化为Json子对象可以是将目标对象的子对象转化为Json对象。
步骤S1032,将目标对象的子对象的数组属性转化为Json数组对象。
相应地,目标对象的子对象可以包括数组属性,因此将数组属性转化为Json数组对象。
步骤S1033,将目标对象的子对象的值属性转化为Json值对象。
相应地,目标对象的子对象可以包括值属性,因此将值属性转化为Json值对象。
需要说明的是,目标对象的子对象的属性还可以是包括对象属性、值属性和数组属性中的几种组合属性,则根据子对象的属性进行相应的转化。当然,目标对象的子对象还可以包括子对象,其子对象的处理同目标对象的子对象的处理相同。由此可以看出,可以通过本发明实施例的对象序列化方法对任意对象进行序列化并控制Json序列化生成的结果。
图4是根据本发明第二实施例的对象序列化方法的流程图。该实施例的对象序列化方法可以是上述实施例的对象序列化方法的一种优选实施方式。如图4所示,该对象序列化方法包括步骤如下:
步骤S201,获取目标对象。
目标对象为客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。例如,当对象为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值,从而通过计算机语言表示客观世界中存在的人、事、物体等实体。目标对象可以是任意的客观世界中存在的人、事、物体等实体,这里的目标对象可以是用户输入的需要进行序列化的对象。
步骤S202,获取用户选择的目标对象的属性。
由于目标对象包括多个属性,用户可以选择目标对象的任意的一些属性进行序列化,在获取目标对象之后,获取用户选择的目标对象的属性,以便于对目标对象进行序列化。
步骤S203,创建与目标对象对应Json对象。
在获取目标对象的属性之后,可以根据获取到的获取目标对象的属性创建目标对象对应Json值,Json值也为一个类,继承Json对象,Json值的类可以用于将一个基本类型的属性值包装成一个Json值对象,提供一个带参数的构造函数,以及生成Json字符串的方法。其中,带参数的构造函数会根据不同类型的参数输入,决定生成Json字符串的格式。例如,如果用户选择的目标对象的属性只包含值属性,则可以创建Json值对象,以便于将目标对象的值属性转化为相应的Json值对象。
步骤S204,由用户选择的目标对象的属性将目标对象转化为相应的Json对象。
在创建与目标对象对应Json对象之后,由目标对象的属性将目标对象转化为相应的Json对象。例如,目标对象的属性为值属性,则将值属性转化为Json值对象;目标对象的属性为数组属性,则将数组属性转化为Json数组对象;目标对象的属性为对象属性,则将对象属性转化为Json对象。
步骤S205,由Json对象生成目标对象的序列化字符串。
在将目标对象转化为Json对象之后,通过对Json对象进行序列化,生成序列化后的Json字符串,该Json字符串即为目标对象的序列化字符串。这样,通过对Json对象序列化实现对目标对象的序列化。
根据本发明实施例,用户可以根据需要选择的目标对象的属性添加相应的Json对象,进行序列化处理,或者根据需要选择目标对象的部分属性不进行序列化,从而避免了按照固定的结构进行序列化的问题,增强了对对像进行序列化的灵活性。
优选地,步骤S104或者步骤S205可以包括以下步骤:
步骤S301,将Json对象的Json值对象按照Json语法生成Json字符串。
将Json值对象按照Json语法生成Json字符串,可以是以键值对的方式生成Json字符串,例如,当目标对象为“王刚”时,其包含“姓名”属性,则通过Json值对象按照键值对的形式生成Json字符串为“‘姓名’:‘王刚’”,其中,‘姓名’为键,‘王刚’为值,中间以冒号隔开,从而生成了键值对的形式的Json字符串。
步骤S302,将Json对象的Json数组对象按照Json语法生成Json字符串。
将Json对象的Json数组对象按照Json语法生成Json字符串,并以键值的方式呈现在序列化后的字符串上。
例如,当对象为“李梅”时,其对应的属性为“职务”,该属性为数组,在转化的过程中将其转化后的字符串为“职务”:[“顾问”,”母亲”]。
步骤S303,将目标对象的对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串。
由于目标对象包括对象属性,其对象属性对应的对象还可以包括对象属性、值属性和数组属性,则对应的将对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串,并最终呈现在目标对象序列化后的字符串上。
例如,目标对象为“王刚”,其具有属性为“配偶”,该属性为对象属性,则转化后的字符串为“配偶”:{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}。
Json对象、Json值对象、Json数组对象在序列化期间,会生成不同格式的字符串。以属性名称做为键,冒号为分割,多个属性值以逗号区分。
目标对象(王刚)拥有5个属性,其中包含3个JSON值(姓名,年龄,性别),一个json数组(车辆),和一个Json对象(配偶),其中,目标对象“王刚”的配偶这个Json对象,结果为{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}。
得到最后结果:
{“姓名”:“王刚”,“年龄”:28,“性别”:“男”,“车辆”:[“桑塔纳2000”,“奥迪A6”,“幻影劳斯莱斯”],“配偶”:{“姓名”:“李梅”,“年龄”:28,“性别”:“女”,“职务”:[“顾问”,“母亲”]}}
从而完成序列化的对象转化和生成目标字符串的过程。
下面以C#语言为例,对本方案的一个应用场景进行描述。
首先对Json的类做一个编程级别的命名,Json对象命名为JsonObject,Json数组命名为JsonArray,Json值命名为JsonValue。实现步骤如下:
步骤1,创建一个测试类(书籍Book类),Book类包含了多个属性,如整数的ID为标识,书籍编号ISBN,作者Author、出版社Publisher、备注Remarks和一个时
步骤2,创建一个书籍类的测试对象,其对应的整数的ID为标识,书籍编号ISBN,作者Author、出版社Publisher、备注Remarks和一个时间类型的出版日期PublishDate等属性均具有对应属性值,代码如下:
步骤3,创建一个JsonObject对象,代码如下:
JsonObject joBook=new JsonObject();
步骤4,添加Json对象(joBook)的属性,代码如下:
步骤5,由于备注Remarks为空,为了节省有可能的网络传输,这个字段将不会包含在JsonObject中,也不会参与Json对象的序列化。
步骤6,调用Json对象(joBook)的序列化方法获得Book对象序列化后的Json字符串,代码如下:
{"ID":1,"ISBN":"000-0-0000-0000-0","Author":"XXX","PublishDate":"1999-9-9","Publisher":"XXX"}
对于复杂对象的序列化,数组与步骤4同样的方式创建JsonArray对象并对joBook赋值;包含子对象的序列化,首先使用步骤4的方式创建测试对象和子对象,然后对测试对象进行子对象的赋值操作。通过反复/嵌套应用步骤4和复杂对象的序列化方法,对任意对象进行序列化,并控制Json生成结果。
根据上述实施例的描述,可以得出本发明实施例取得的效果:
由于Json对象封装了序列化生成字符串这一过程,开发者仅需要调用Json对象的序列化方法即可,无需了解Json格式,避免字符串操作的复杂度可能引起的错误,即使完全不了解Json的开发者,也可以完成对象的序列化。由于整个过程中均为面向对象的操作方式,大大降低了开发的复杂度,降低出错概率,节省了开发者时间。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种对象序列化方法,其特征在于,包括:
获取目标对象;
创建与所述目标对象对应的Json对象,所述Json对象为具有所述目标对象的属性的设置操作的类;
将所述目标对象转化为所述Json对象,其中,所述Json对象中具有生成序列化字符串的方法;以及
由所述Json对象生成所述目标对象的序列化字符串,其中,所述序列化字符串的格式由带参数的构造函数确定;
其中,根据需要选择的所述目标对象的属性添加相应的所述Json对象,进行序列化处理,或者根据需要选择的所述目标对象的属性不进行序列化处理。
2.根据权利要求1所述的对象序列化方法,其特征在于,所述目标对象的属性包括对象属性、数组属性和值属性中至少之一,其中,创建与所述目标对象对应的Json对象包括以下至少之一:
创建与所述目标对象的属性对应的Json子对象,所述Json子对象为用于对所述对象属性进行序列化操作的类;
创建与所述目标对象的属性对应的Json数组对象,所述Json数组对象为对所述数组属性进行序列化操作的类;以及
创建与所述目标对象的属性对应的Json值对象,所述Json值对象为对所述值属性进行序列化操作的类。
3.根据权利要求2所述的对象序列化方法,其特征在于,所述目标对象包括子对象,在获取目标对象之后,所述对象序列化方法还包括:获取所述目标对象的子对象,其中,
在将所述目标对象转化为所述Json对象之后,所述对象序列化方法还包括:将所述目标对象的子对象转化为所述Json子对象;将所述目标对象的子对象的数组属性转化为所述Json数组对象;将所述目标对象的子对象的值属性转化为所述Json值对象。
4.根据权利要求1所述的对象序列化方法,其特征在于,在获取目标对象之后,所述对象序列化方法还包括:获取用户选择的所述目标对象的属性,其中,
将所述目标对象转化为所述Json对象包括:由用户选择的所述目标对象的属性将所述目标对象转化为相应的Json对象。
5.根据权利要求1所述的对象序列化方法,其特征在于,由所述Json对象生成所述目标对象的序列化字符串包括:
将所述Json对象的Json值对象按照Json语法生成Json字符串;
将所述Json对象的Json数组对象按照所述Json语法生成Json字符串;以及
将所述目标对象的对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串。
6.一种对象序列化装置,其特征在于,包括:
第一获取单元,用于获取目标对象;
创建单元,用于创建与所述目标对象对应的Json对象,所述Json对象为具有所述目标对象的属性的设置操作的类;
第一转化单元,用于将所述目标对象转化为所述Json对象,其中,所述Json对象中具有生成序列化字符串的方法;以及
生成单元,用于由所述Json对象生成所述目标对象的序列化字符串,其中,所述序列化字符串的格式由带参数的构造函数确定;
其中,根据需要选择的所述目标对象的属性添加相应的所述Json对象,进行序列化处理,或者根据需要选择的所述目标对象的属性不进行序列化处理。
7.根据权利要求6所述的对象序列化装置,其特征在于,所述目标对象的属性包括对象属性、数组属性和值属性中至少之一,其中,所述创建单元包括以下至少之一:
第一创建模块,用于创建与所述目标对象的属性对应的Json子对象,所述Json子对象为用于对所述对象属性进行序列化操作的类;
第二创建模块,用于创建与所述目标对象的属性对应的Json数组对象,所述Json数组对象为对所述数组属性进行序列化操作的类;以及
第三创建模块,用于创建与所述目标对象的属性对应的Json值对象,所述Json值对象为对所述值属性进行序列化操作的类。
8.根据权利要求7所述的对象序列化装置,其特征在于,所述目标对象包括子对象,所述对象序列化装置还包括:
第二获取单元,用于在获取目标对象之后,获取所述目标对象的子对象,其中;以及
第二转化单元,用于在在将所述目标对象转化为所述Json对象之后,将所述目标对象的子对象转化为所述Json子对象,将所述目标对象的子对象的数组属性转化为所述Json数组对象,将所述目标对象的子对象的值属性转化为所述Json值对象。
9.根据权利要求6所述的对象序列化装置,其特征在于,所述对象序列化装置还包括:第三获取单元,用于在获取目标对象之后,获取用户选择的所述目标对象的属性,其中,
所述第一转化单元包括:转化模块,用于由用户选择的所述目标对象的属性将所述目标对象转化为相应的Json对象。
10.根据权利要求6所述的对象序列化装置,其特征在于,所述生成单元包括:
第一生成模块,用于将所述Json对象的Json值对象按照Json语法生成Json字符串;
第二生成模块,用于将所述Json对象的Json数组对象按照所述Json语法生成Json字符串;以及
第三生成模块,用于将所述目标对象的对象属性的Json对象、Json值和Json数组按照Json语法生成Json字符串。
CN201310596703.0A 2013-11-21 2013-11-21 对象序列化方法和装置 Active CN103593194B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310596703.0A CN103593194B (zh) 2013-11-21 2013-11-21 对象序列化方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310596703.0A CN103593194B (zh) 2013-11-21 2013-11-21 对象序列化方法和装置

Publications (2)

Publication Number Publication Date
CN103593194A CN103593194A (zh) 2014-02-19
CN103593194B true CN103593194B (zh) 2017-12-22

Family

ID=50083354

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310596703.0A Active CN103593194B (zh) 2013-11-21 2013-11-21 对象序列化方法和装置

Country Status (1)

Country Link
CN (1) CN103593194B (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104331315B (zh) * 2014-10-31 2017-10-17 北京思特奇信息技术股份有限公司 一种任意层次json对象的解析与生成方法及系统
CN104360865B (zh) * 2014-11-28 2018-05-18 中国建设银行股份有限公司 一种序列化方法、反序列化方法及相关设备
CN106294385A (zh) * 2015-05-19 2017-01-04 阿里巴巴集团控股有限公司 数据对象序列化和反序列化数据对象的方法及装置
CN105159928B (zh) * 2015-08-05 2019-04-23 深圳联友科技有限公司 一种json数据转换成模型数据的方法及系统
CN106502635A (zh) * 2015-09-08 2017-03-15 北京国双科技有限公司 数据处理方法和装置
CN106557531B (zh) * 2015-09-30 2020-07-03 伊姆西Ip控股有限责任公司 复杂结构对象转换成平面化数据的方法、设备和存储介质
CN105335156B (zh) * 2015-10-22 2019-01-15 福建星网锐捷通讯股份有限公司 一种java对象序列化的方法以及系统
CN106843819B (zh) * 2015-12-03 2020-10-09 北京国双科技有限公司 对象序列化的方法及装置
CN105787128B (zh) * 2016-03-29 2019-04-23 四川秘无痕信息安全技术有限责任公司 一种恢复Java序列化文件数据的方法
CN105893488A (zh) * 2016-03-29 2016-08-24 国云科技股份有限公司 一种便捷灵活自制的数据统计报表制作方法
CN106775638B (zh) * 2016-11-22 2020-04-21 北京皮尔布莱尼软件有限公司 一种对象序列化方法、装置和计算设备
CN108132789A (zh) * 2016-11-30 2018-06-08 北京国双科技有限公司 信息转换方法和装置
CN106598922B (zh) * 2016-12-23 2020-01-14 Tcl集团股份有限公司 一种字符串转换方法及系统
CN107451237B (zh) * 2017-07-26 2020-09-15 阿里巴巴集团控股有限公司 序列化与反序列化方法、装置及设备
CN108874387B (zh) * 2018-06-27 2022-05-17 深圳市金蝶天燕云计算股份有限公司 一种数据序列化方法及其相关设备
WO2020014807A1 (zh) * 2018-07-16 2020-01-23 拜椰特(上海)软件技术有限公司 计算机编程语言用字符实现对象的方法
CN109343836B (zh) * 2018-08-31 2021-09-10 创新先进技术有限公司 数据序列化、数据反序列方法、装置及设备
CN109189380B (zh) * 2018-09-12 2021-11-26 湖南创智艾泰克科技有限公司 算法集成框架系统及方法
CN109388402A (zh) * 2018-09-26 2019-02-26 杭州米加科技股份有限公司 基于Android平台的轻量级Josn格式解析工具
CN114117992B (zh) * 2021-11-25 2023-03-24 北京力控元通科技有限公司 一种序列化和反序列化方法、装置和电子设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8332815B2 (en) * 2009-03-17 2012-12-11 International Business Machines Corporation Enhanced development tool for utilizing a javascript object notation (JSON) bridge for non-java-based component communication within java-based composite applications
CN101888368A (zh) * 2009-05-14 2010-11-17 灰熊(北京)科技有限公司 一种使用tcp协议传输短文本消息的方法
US9064049B2 (en) * 2010-12-14 2015-06-23 Microsoft Technology Licensing, Llc Remote debugging of server side code without blocking or high-level privileges
CN103179133B (zh) * 2013-04-12 2016-03-30 北京工业大学 基于实体类的客户端与服务器通信的方法
CN103236967A (zh) * 2013-04-23 2013-08-07 浪潮集团山东通用软件有限公司 一种基于消息的即时协同办公系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
GSON Serialiser Example;Java Creed;《http://www.javacreed.com/gson-serialiser-example》;20130207;第2-9页 *

Also Published As

Publication number Publication date
CN103593194A (zh) 2014-02-19

Similar Documents

Publication Publication Date Title
CN103593194B (zh) 对象序列化方法和装置
Terzić et al. Development and evaluation of MicroBuilder: a Model-Driven tool for the specification of REST Microservice Software Architectures
Ahmad et al. Design and implementation of cloud-centric configuration repository for DIY IoT applications
CN107463668B (zh) 序列化和反序列化的方法及装置、计算机设备及存储介质
CN103605518A (zh) 对象反序列化方法和装置
JP2021197132A (ja) 知識表現学習方法、装置、電子機器、記憶媒体及びコンピュータプログラム
CN107291458A (zh) 一种Web应用的插件化构建方法、系统及服务器
CN104407863B (zh) 抽象控件模型编程装置和方法
US8756407B2 (en) Configuration rule prototyping tool
CN102023856A (zh) 根据用户的需求格式化输出及操作伺服端业务数据的方法
CN102508674A (zh) 基于json进行对象化参数传递的方法及系统
CN110275789A (zh) 数据处理方法及装置
CN108829884A (zh) 数据映射方法及装置
CN113946321B (zh) 计算逻辑的处理方法、电子设备和可读存储介质
CN106598922A (zh) 一种字符串转换方法及系统
JP6902318B2 (ja) ニューラルネットワークの全結合層を畳み込み層に置き換えるプログラム
CN108416568A (zh) 政务业务数据处理方法、装置及终端设备
CN105989067A (zh) 从图片生成文本摘要的方法、用户设备及训练服务器
CN104063231B (zh) 一种基于hit‑tena的试验资源快速接入方法
Corredor et al. Model-driven methodology for rapid deployment of smart spaces based on resource-oriented architectures
CN104750468B (zh) 一种服务端拓扑数据转换方法和转换装置
CN103955369B (zh) 一种基于扩展uml的软件模糊自适应建模工具构造方法
CN109885298A (zh) 一种ui组件生成方法、装置和终端设备
Fernández et al. A P4-enabled RINA interior router for software-defined data centers
CN105793842B (zh) 序列化消息之间的转换方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Object serialization method and device

Effective date of registration: 20190531

Granted publication date: 20171222

Pledgee: Shenzhen Black Horse World Investment Consulting Co., Ltd.

Pledgor: Beijing Guoshuang Technology Co.,Ltd.

Registration number: 2019990000503

CP02 Change in the address of a patent holder
CP02 Change in the address of a patent holder

Address after: 100083 No. 401, 4th Floor, Haitai Building, 229 North Fourth Ring Road, Haidian District, Beijing

Patentee after: Beijing Guoshuang Technology Co.,Ltd.

Address before: 100086 Beijing city Haidian District Shuangyushu Area No. 76 Zhichun Road cuigongfandian 8 layer A

Patentee before: Beijing Guoshuang Technology Co.,Ltd.