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

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

Info

Publication number
CN103605518A
CN103605518A CN201310585755.8A CN201310585755A CN103605518A CN 103605518 A CN103605518 A CN 103605518A CN 201310585755 A CN201310585755 A CN 201310585755A CN 103605518 A CN103605518 A CN 103605518A
Authority
CN
China
Prior art keywords
json
target string
unserializing
class
described target
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
Application number
CN201310585755.8A
Other languages
English (en)
Other versions
CN103605518B (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 CN201310585755.8A priority Critical patent/CN103605518B/zh
Publication of CN103605518A publication Critical patent/CN103605518A/zh
Application granted granted Critical
Publication of CN103605518B publication Critical patent/CN103605518B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种对象反序列化方法和装置。其中,对象反序列化方法包括:获取目标字符串;创建与所述目标字符串对应的Json对象,所述Json对象为具有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)就是客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。
反序列化(Deserialization)与序列化相对的是反序列化,它将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是根据本发明第二实施例的对象反序列化方法的流程图;以及
图5是根据本发明第三实施例的对象反序列化方法的流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明实施例提供了一种对象反序列化装置,该装置可以通过计算机设备实现其功能。
图1是根据本发明第一实施例的对象反序列化装置的结构示意图。如图1所示,该对象反序列化装置包括第一获取单元10、创建单元20、转化单元30和生成单元40。
第一获取单元10用于获取目标字符串。
该目标字符串中包含有进行反序列化生成的对像的键属性,例如,当对像为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成有与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值。获取目标字符串以便于将该目标字符串进行反序列化。
Json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。
对象:对象在javascript中表示为“{}”扩起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象。key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
数组:数组在javascript中是中括号“[]”扩起来的内容,数据结构为["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
创建单元20用于创建与目标字符串对应的Json对象,Json对象为具有Json属性的设置操作的类。
Json对象中具有将Json字符串生成其对应的对象的方法。该Json对象可以是用于提供判断键属性是否存在的方法和通过属性名称获取指定类型值的方法的类。例如,当判断对象为书籍时,Json对象可以用于判断其出版社这一属性对应的键属性是否存在,并获取该属性对应的类型值。这里的类(Class)是面向对象程序设计语言中的一个概念。实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。一个类定义了一组对象。类具有行为(be-havoir),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。
类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。类通过接口与外界发生关系。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都像一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值(value)。
转化单元30用于将目标字符串转化为Json对象。
由于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字符串中包含有相应的属性名称“ISBN”、“Author”、“Publisher”、“Remarks”等。指定类型值即各属性名称相应的具有特定类型的值。通过获取指定类型值用以生成目标字符串的对象。
图2是根据本发明第二实施例的对象反序列化装置的结构示意图。该实施例的对象反序列化装置可以作为上述实施例的对象反序列化装置的一种优选实施方式。如图3所示,该对象反序列化装置包括第一获取单元10、创建单元20、转化单元30和生成单元40,其中,创建单元20包括:第一获取模块201、第二获取模块202、第三获取模块203和第一创建模块204。第一获取单元10、转化单元30和生成单元40与图1所示的第一获取单元10、转化单元30和生成单元40功能相同,这里不做赘述。
第一获取模块201用于获取目标字符串对应的数组。
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。组成数组的各个变量成为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。在目标字符串中可以存在有以数组形式存在的对象的属性值,因此创建Json对象同时,创建一个可选的Json数组的类,可以用于通过索引获取数组中的值。
第二获取模块202用于获取数组的索引。
该索引用于索引数组中的值,以便于准确定位到数组中的值并获取该数组中的值。
第三获取模块203用于通过索引获取数组中的值。
当索引到该数组中的值后,获取该数组的值。由于数组中的值对应有对象的属性,便于创建相应的Json对象,最后完成目标字符串的反序列化。
第一创建模块204用于通过数组中的值创建与目标字符串对应的Json对象。
由于数组中的值对应有对象的属性,因此创建后的Json对象具有与目标字符串相应的属性。创建的Json数组继承Json对象,可以根据数组中的值创建Json数组以创建与目标字符串对应的Json对象。
优选地,创建单元20包括第二创建模块,用于创建一个测试类,测试类为书籍类对象,书籍类对象包含多个属性。
创建一个测试类(书籍Book类),Book类包含了几个属性,如整数的ID为标识,书籍编号ISBN,作者Author、出版社Publisher、备注Remarks均为字符串,和一个时间类型的出版日期PublishDate。由于计算机开发语言不同,实现方式不同,我们仅以C#为例,其中,将“Json对象”命名为JsonObject,将“Json数组”命名为JsonArray。在该实施例中,创建的测试类如下:
Figure BDA0000417534190000071
生成单元40包括转化模块和生成模块。转化模块用于序列化预先设置的Json字符串,将Json字符串反序列化为书籍类对象。如{"ID":1,"ISBN":"000-0-0000-0000-0","Author":"XXX","PublishDate":"1999-9-9","Publisher":"XXX"}。
生成模块用于通过书籍类对象生成目标字符串的对象。
通过Json对象构建目标对象Book:
JsonObject jo=JsonObject.Parse("{\"ID\":1,\"ISBN\":\"000-0-0000-0000-0\","Author\":\"XXX\",\"PublishDate\":\"1999-9-9\",\"Publisher\":\"XXX\"}");
Book book=new Book();
book.ID=jo.GetInt("ID");
book.ISBN=jo.GetString("ISBN");
book.Author=jo.GetString("Author");
book.PublishDate=jo.GetDate("PublishDate");
book.Publisher=jo.GetString("Publisher");
if(jo.Has("Remarks"))book.Remarks=jo.GetString("Remarks");
对于复杂对象的序列化,数组、Json对象在JsonObject可以通过GetArray和GetObject来获取。
对象反序列化装置还包括操作单元,该操作单元用于由Json对象生成目标字符串的对象之后,通过Json对象对目标字符串完成反序列化操作。
根据本发明实施例,Json对象封装了Json字符串的处理过程,开发者不必了解Json格式,也无需处理复杂的字符串解析,开发者仅需要了解面向对象的概念即可完成反序列化,大大降低了开发的复杂度,降低出错概率,节省了开发者时间。其中,封装是指隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。
本发明实施例还提供了一种对象反序列化方法。该方法运行在计算机设备上。需要说明的是,本发明实施例的对象反序列化方法可以通过本发明实施例所提供的对象反序列化装置来执行,本发明实施例的对象反序列化装置也可以用于执行本发明实施例所提供的对象反序列化方法。
图3是根据本发明第一实施例的对象反序列化方法的流程图。如图3所示,该对象反序列化方法包括步骤如下:
步骤S101,获取目标字符串。该目标字符串为Json字符串,可以是任意的需要进行反序列化的Json字符串。该目标字符串中包含有进行反序列化生成的对像的键属性,例如,当对像为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成有与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值。获取目标字符串以便于将该目标字符串进行反序列化。
Json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。
对象:对象在javascript中表示为“{}”扩起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象。key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
数组:数组在javascript中是中括号“[]”扩起来的内容,数据结构为["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
步骤S102,创建与目标字符串对应的Json对象,Json对象为具有Json属性的设置操作的类。Json对象中具有将Json字符串生成其对应的对象的方法。该Json对象可以是用于提供判断键属性是否存在的方法和通过属性名称获取指定类型值的方法的类。例如,当判断对象为书籍时,Json对象可以用于判断其出版社这一属性对应的键属性是否存在,并获取该属性对应的类型值。这里的类(Class)是面向对象程序设计语言中的一个概念。实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。一个类定义了一组对象。类具有行为(be-havoir),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。
类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。类通过接口与外界发生关系。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都像一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值(value)。
步骤S103,将目标字符串转化为Json对象。由于Json对象具有将Json字符串生成其对应的对象的方法,Json对象封装了Json字符串的处理过程,将目标字符串转化为Json对象,以便于通过Json对象生成与目标字符串的对象。目标字符串的对象即为目标字符串对应的目标对象。
步骤S104,由Json对象生成目标字符串的对象。其中Json对象为目标字符串对应的Json对象,且Json对象封装了Json字符串的处理过程,因此由Json对象可以生成目标字符串的对象,从而实现目标字符串的反序列化。
根据本发明实施例,通过创建与目标字符串对应的Json对象,并将目标字符串转化为该Json对象,由Json对象生成目标字符串的对象,从而实现对目标字符串的反序列化,由于将Json字符串转化为一个标准的Json对象,从而不会因为Json字符串内容与目标对象不匹配而导致的反序列化失败,克服了语言框架自带的无法反序列化Json字符串的问题。
优选地,Json对象用于提供判断目标字符串的键属性是否存在的判断依据,在步骤102之后,对象反序列化方法还包括:
步骤5,通过Json对象判断目标字符串的键属性是否存在。由于将目标字符串进行反序列化时,需要获取目标字符串的对象的所有属性值,以对目标字符串进行反序列化生成目标字符串的对象。当创建与目标字符串对应的Json对象之后,需要Json对象通过判断目标字符串键属性是否存在,例如,当对象为书籍时,需要判断书籍对应的书籍编号、作者、出版社和备注等属性在Json字符串中的属性值是否存在。
由于Json字符串的数据提供者与反序列化的开发者不同,当数据提供者将Json字符串的数据进行升级时,例如:增加/减少Json字符串对应的对象的属性,或者更改其数据类型,那么反序列化的开发者使用传统手动方式解析极有可能导致解析失败,本装置通过判断属性存在和类型检测仍然可以保持反序列化的兼容性。
属性是实体的描述性性质或特征,具有数据类型、域、默认值三种性质。属性也往往用于对控件特性的描述。对于按钮控件的名称、显示的文字、背景色,背景图片等等。大多数控件都具有的属性称为公共属性:名称、标题、背景色、前景色等等。
优选地,Json对象用于提供通过目标字符串的属性名称获取指定类型值的依据,在步骤102之后,对象反序列化方法还包括:
步骤S6,Json对象通过目标字符串的属性名称获取指定类型值。目标字符串的属性名称对应着目标字符串的对象的属性,例如,当对象为书籍时,其具有书籍编号、作者、出版社和备注等属性在Json字符串中包含有相应的属性名称“ISBN”、“Author”、“Publisher”、“Remarks”等。指定类型值即各属性名称相应的具有特定类型的值。通过获取指定类型值用以生成目标字符串的对象。
图4是根据本发明第二实施例的对象反序列化方法的流程图。该实施例的对象反序列化方法可以作为上述实施例的对象反序列化方法一种优选实施方式。如图4所示,该对象反序列化方法包括步骤如下:
步骤S201,获取目标字符串。该目标字符串为Json字符串,可以是任意的需要进行反序列化的Json字符串。该目标字符串中包含有进行反序列化生成的对像的键属性,例如,当对像为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成有与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值。获取目标字符串以便于将该目标字符串进行反序列化。
步骤S202,获取目标字符串对应的数组。所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。组成数组的各个变量成为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。在目标字符串中可以存在有以数组形式存在的对象的属性值,因此创建Json对象同时,创建一个可选的Json数组的类,可以用于通过索引获取数组中的值。
步骤S203,获取数组的索引。该索引用于索引数组中的值,以便于准确定位到数组中的值并获取该数组中的值。
步骤S204,通过索引获取数组中的值。当索引到该数组中的值后,获取该数组的值。由于数组中的值对应有对象的属性,便于创建相应的Json对象,最后完成目标字符串的反序列化。
步骤S205,通过数组中的值创建与目标字符串对应的Json对象。由于数组中的值对应有对象的属性,因此创建后的Json对象具有与目标字符串相应的属性。创建的Json数组继承Json对象,可以根据数组中的值创建Json数组以创建与目标字符串对应的Json对象。
步骤S206,将目标字符串转化为Json对象。由于Json对象具有将Json字符串生成其对应的对象的方法,Json对象封装了Json字符串的处理过程,将目标字符串转化为Json对象,以便于通过Json对象生成与目标字符串的对象。目标字符串的对象即为目标字符串对应的目标对象。
步骤S207,由Json对象生成目标字符串的对象。其中Json对象为目标字符串对应的Json对象,且Json对象封装了Json字符串的处理过程,因此由Json对象可以生成目标字符串的对象,从而实现目标字符串的反序列化。
根据本发明实施例,通过创建一个Json数组,以方便对目标字符串中的数组进行反序列化的。
图5是根据本发明第三实施例的对象反序列化方法的流程图。该实施例的对象反序列化方法可以作为上述实施例的一种优选实施方式。如图5所示,该对象反序列化方法包括步骤如下:
步骤S301,获取目标字符串。该目标字符串为Json字符串,可以是任意的需要进行反序列化的Json字符串。该目标字符串中包含有进行反序列化生成的对像的键属性,例如,当对像为书籍,其具有的属性包括书籍编号、作者、出版社和备注等,将该书籍进行序列化后,生成有与该书籍对应的Json字符串,该Json字符串具有与书籍的属性相对应的属性值。获取目标字符串以便于将该目标字符串进行反序列化。
步骤S302,创建一个测试类,测试类为书籍类对象,书籍类对象包含多个属性。创建一个测试类(书籍Book类),Book类包含了几个属性,如整数的ID为标识,书籍编号ISBN,作者Author、出版社Publisher、备注Remarks均为字符串,和一个时间类型的出版日期PublishDate。由于计算机开发语言不同,实现方式不同,我们仅以C#为例,其中,将“Json对象”命名为JsonObject,将“Json数组”命名为JsonArray。在该实施例中,创建的测试类如下:
Figure BDA0000417534190000121
步骤S303,序列化预先设置的Json字符串,将Json字符串反序列化为书籍类对象。如{"ID":1,"ISBN":"000-0-0000-0000-0","Author":"XXX","PublishDate":"1999-9-9","Publisher":"XXX"}。
步骤S304,通过书籍类对象生成目标字符串的对象。通过Json对象构建目标对象Book:
JsonObject jo=JsonObject.Parse("{\"ID\":1,\"ISBN\":\"000-0-0000-0000-0\","Author\":\"XXX\",\"PublishDate\":\"1999-9-9\",\"Publisher\":\"XXX\"}");
Book book=new Book();
book.ID=jo.GetInt("ID");
book.ISBN=jo.GetString("ISBN");
book.Author=jo.GetString("Author");
book.PublishDate=jo.GetDate("PublishDate");
book.Publisher=jo.GetString("Publisher");
if(jo.Has("Remarks"))book.Remarks=jo.GetString("Remarks");
对于复杂对象的序列化,数组、Json对象在JsonObject可以通过GetArray和GetObject来获取。
步骤S305,由Json对象生成目标字符串的对象。其中Json对象为目标字符串对应的Json对象,且Json对象封装了Json字符串的处理过程,因此由Json对象可以生成目标字符串的对象,从而实现目标字符串的反序列化。
步骤S306,通过Json对象对目标字符串完成反序列化操作。
根据本发明实施例,Json对象封装了Json字符串的处理过程,开发者不必了解Json格式,也无需处理复杂的字符串解析,开发者仅需要了解面向对象的概念即可完成反序列化,大大降低了开发的复杂度,降低出错概率,节省了开发者时间。其中,封装是指隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。
需要说明的是,本发明实施例的对象反序列化方法和装置可以用于任何面向对象编程语言,本实施例中仅以C#语言进行举例说明,并不对本发明实施例有不当限定。
另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种对象反序列化方法,其特征在于,包括:
获取目标字符串;
创建与所述目标字符串对应的Json对象,所述Json对象为具有Json属性的设置操作的类;
将所述目标字符串转化为所述Json对象;以及
由所述Json对象生成所述目标字符串的对象。
2.根据权利要求1所述的对象反序列化方法,其特征在于,所述Json对象用于提供判断所述目标字符串的键属性是否存在的判断依据,在创建与所述目标字符串对应的Json对象之后,所述对象反序列化方法还包括:
通过所述Json对象判断所述目标字符串的键属性是否存在。
3.根据权利要求1所述的对象反序列化方法,其特征在于,所述Json对象用于提供通过所述目标字符串的属性名称获取指定类型值的依据,在创建与所述目标字符串对应的Json对象之后,所述对象反序列化方法还包括:
所述Json对象通过所述目标字符串的属性名称获取指定类型值。
4.根据权利要求1所述的对象反序列化方法,其特征在于,创建与所述目标字符串对应的Json对象包括:
获取所述目标字符串对应的数组;
获取所述数组的索引;
通过所述索引获取所述数组中的值;以及
通过所述数组中的值创建与所述目标字符串对应的Json对象。
5.根据权利要求1所述的对象反序列化方法,其特征在于,
创建与所述目标字符串对应的Json对象包括:创建一个测试类,所述测试类为书籍类对象,所述书籍类对象包含多个属性;
由所述Json对象生成所述目标字符串的对象包括:序列化预先设置的Json字符串,将所述Json字符串反序列化为所述书籍类对象;通过所述书籍类对象生成所述目标字符串的对象,
在由所述Json对象生成所述目标字符串的对象之后,所述对象反序列化方法还包括:通过所述Json对象对所述目标字符串完成反序列化操作。
6.一种对象反序列化装置,其特征在于,包括:
第一获取单元,用于获取目标字符串;
创建单元,用于创建与所述目标字符串对应的Json对象,所述Json对象为具有Json属性的设置操作的类;
转化单元,用于将所述目标字符串转化为所述Json对象;以及
生成单元,用于由所述Json对象生成所述目标字符串的对象。
7.根据权利要求6所述的对象反序列化装置,其特征在于,所述Json对象用于提供判断所述目标字符串的键属性是否存在的判断依据,所述对象反序列化装置还包括:
判断单元,用于在创建与所述目标字符串对应的Json对象之后,通过所述Json对象判断所述目标字符串的键属性是否存在。
8.根据权利要求6所述的对象反序列化装置,其特征在于,所述Json对象用于提供通过所述目标字符串的属性名称获取指定类型值的依据,所述对象反序列化装置还包括:
第二获取单元,用于在创建与所述目标字符串对应的Json对象之后,所述Json对象通过所述目标字符串的属性名称获取指定类型值。
9.根据权利要求6所述的对象反序列化装置,其特征在于,所述创建单元包括:
第一获取模块,用于获取所述目标字符串对应的数组;
第二获取模块,用于获取所述数组的索引;
第三获取模块,用于通过所述索引获取所述数组中的值;以及
第一创建模块,用于通过所述数组中的值创建与所述目标字符串对应的Json对象。
10.根据权利要求6所述的对象反序列化装置,其特征在于,
所述创建单元包括:第二创建模块,用于创建一个测试类,所述测试类为书籍类对象,所述书籍类对象包含多个属性;
所述生成单元包括:转化模块,用于序列化预先设置的Json字符串,将所述Json字符串反序列化为所述书籍类对象;生成模块,用于通过所述书籍类对象生成所述目标字符串的对象,
所述对象反序列化装置还包括:操作单元,用于由所述Json对象生成所述目标字符串的对象之后,通过所述Json对象对所述目标字符串完成反序列化操作。
CN201310585755.8A 2013-11-19 2013-11-19 对象反序列化方法和装置 Active CN103605518B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310585755.8A CN103605518B (zh) 2013-11-19 2013-11-19 对象反序列化方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310585755.8A CN103605518B (zh) 2013-11-19 2013-11-19 对象反序列化方法和装置

Publications (2)

Publication Number Publication Date
CN103605518A true CN103605518A (zh) 2014-02-26
CN103605518B CN103605518B (zh) 2017-12-19

Family

ID=50123748

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310585755.8A Active CN103605518B (zh) 2013-11-19 2013-11-19 对象反序列化方法和装置

Country Status (1)

Country Link
CN (1) CN103605518B (zh)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103970855A (zh) * 2014-05-06 2014-08-06 车智互联(北京)科技有限公司 一种数据处理设备和方法
CN104331315A (zh) * 2014-10-31 2015-02-04 北京思特奇信息技术股份有限公司 一种任意层次json对象的解析与生成方法及系统
CN104462322A (zh) * 2014-12-01 2015-03-25 北京国双科技有限公司 字符串比对方法和装置
CN105159928A (zh) * 2015-08-05 2015-12-16 深圳联友科技有限公司 一种json数据转换成模型数据的方法及系统
CN105468606A (zh) * 2014-08-25 2016-04-06 小米科技有限责任公司 网页保存的方法及装置
CN105487885A (zh) * 2015-11-23 2016-04-13 盛趣信息技术(上海)有限公司 手游热更新方法
WO2017008654A1 (zh) * 2015-07-13 2017-01-19 阿里巴巴集团控股有限公司 一种反序列化方法及装置
CN106610922A (zh) * 2015-10-26 2017-05-03 北京国双科技有限公司 反序列化方法及装置
CN106843819A (zh) * 2015-12-03 2017-06-13 北京国双科技有限公司 对象序列化的方法及装置
CN108132789A (zh) * 2016-11-30 2018-06-08 北京国双科技有限公司 信息转换方法和装置
CN108694045A (zh) * 2017-02-14 2018-10-23 北京国双科技有限公司 一种数据处理方法及装置
CN109271180A (zh) * 2017-07-12 2019-01-25 北京国双科技有限公司 一种数据处理方法及装置
CN109656550A (zh) * 2018-12-14 2019-04-19 平安城市建设科技(深圳)有限公司 json数据解析方法、装置、设备及可读存储介质
CN109871519A (zh) * 2019-02-18 2019-06-11 北京思特奇信息技术股份有限公司 一种无层级结构的json反序列化方法、装置及存储介质
CN110008281A (zh) * 2019-04-08 2019-07-12 珠海格力电器股份有限公司 一种基于Redis数据库可视化数据的处理方法及装置
CN110147413A (zh) * 2019-04-26 2019-08-20 平安科技(深圳)有限公司 数据存储方法、数据查询方法、装置、设备及存储介质
CN110971581A (zh) * 2018-09-30 2020-04-07 北京国双科技有限公司 加密数据处理方法和装置
CN112214212A (zh) * 2020-10-10 2021-01-12 江西洪都航空工业集团有限责任公司 一种根据json格式数据生成c#语言源代码的方法
CN114117992A (zh) * 2021-11-25 2022-03-01 北京力控元通科技有限公司 一种序列化和反序列化方法、装置和电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100083281A1 (en) * 2008-09-30 2010-04-01 Malladi Sastry K System and method for processing messages using a common interface platform supporting multiple pluggable data formats in a service-oriented pipeline architecture
US20100083277A1 (en) * 2008-09-30 2010-04-01 Malladi Sastry K System and method for processing messages using native data serialization/deserialization in a service-oriented pipeline architecture
CN101888368A (zh) * 2009-05-14 2010-11-17 灰熊(北京)科技有限公司 一种使用tcp协议传输短文本消息的方法
CN102624895A (zh) * 2012-03-09 2012-08-01 亿赞普(北京)科技有限公司 网络业务请求的处理方法及系统
CN103179133A (zh) * 2013-04-12 2013-06-26 北京工业大学 基于实体类的客户端与服务器通信的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100083281A1 (en) * 2008-09-30 2010-04-01 Malladi Sastry K System and method for processing messages using a common interface platform supporting multiple pluggable data formats in a service-oriented pipeline architecture
US20100083277A1 (en) * 2008-09-30 2010-04-01 Malladi Sastry K System and method for processing messages using native data serialization/deserialization in a service-oriented pipeline architecture
CN101888368A (zh) * 2009-05-14 2010-11-17 灰熊(北京)科技有限公司 一种使用tcp协议传输短文本消息的方法
CN102624895A (zh) * 2012-03-09 2012-08-01 亿赞普(北京)科技有限公司 网络业务请求的处理方法及系统
CN103179133A (zh) * 2013-04-12 2013-06-26 北京工业大学 基于实体类的客户端与服务器通信的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
MOKE44、EASYROOM: "返回的json里面有些属性是根本没有的,怎么判断是否存在该属性呢?", 《HTTP://BBS.CSDN.NET/TOPICS/360159009》 *
颜建华: "《Android开发关键技术之旅——Java程序员快速学习通道》", 31 July 2012 *

Cited By (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103970855B (zh) * 2014-05-06 2017-05-10 车智互联(北京)科技有限公司 一种数据处理设备和方法
CN103970855A (zh) * 2014-05-06 2014-08-06 车智互联(北京)科技有限公司 一种数据处理设备和方法
CN105468606A (zh) * 2014-08-25 2016-04-06 小米科技有限责任公司 网页保存的方法及装置
CN104331315A (zh) * 2014-10-31 2015-02-04 北京思特奇信息技术股份有限公司 一种任意层次json对象的解析与生成方法及系统
CN104331315B (zh) * 2014-10-31 2017-10-17 北京思特奇信息技术股份有限公司 一种任意层次json对象的解析与生成方法及系统
CN104462322B (zh) * 2014-12-01 2018-02-02 北京国双科技有限公司 字符串比对方法和装置
CN104462322A (zh) * 2014-12-01 2015-03-25 北京国双科技有限公司 字符串比对方法和装置
WO2017008654A1 (zh) * 2015-07-13 2017-01-19 阿里巴巴集团控股有限公司 一种反序列化方法及装置
CN107038022A (zh) * 2015-07-13 2017-08-11 阿里巴巴集团控股有限公司 一种反序列化方法及装置
CN105159928A (zh) * 2015-08-05 2015-12-16 深圳联友科技有限公司 一种json数据转换成模型数据的方法及系统
CN105159928B (zh) * 2015-08-05 2019-04-23 深圳联友科技有限公司 一种json数据转换成模型数据的方法及系统
CN106610922A (zh) * 2015-10-26 2017-05-03 北京国双科技有限公司 反序列化方法及装置
CN105487885B (zh) * 2015-11-23 2018-10-19 盛趣信息技术(上海)有限公司 手游热更新方法
CN105487885A (zh) * 2015-11-23 2016-04-13 盛趣信息技术(上海)有限公司 手游热更新方法
CN106843819A (zh) * 2015-12-03 2017-06-13 北京国双科技有限公司 对象序列化的方法及装置
CN106843819B (zh) * 2015-12-03 2020-10-09 北京国双科技有限公司 对象序列化的方法及装置
CN108132789A (zh) * 2016-11-30 2018-06-08 北京国双科技有限公司 信息转换方法和装置
CN108694045A (zh) * 2017-02-14 2018-10-23 北京国双科技有限公司 一种数据处理方法及装置
CN109271180A (zh) * 2017-07-12 2019-01-25 北京国双科技有限公司 一种数据处理方法及装置
CN109271180B (zh) * 2017-07-12 2021-12-24 北京国双科技有限公司 一种数据处理方法及装置
CN110971581A (zh) * 2018-09-30 2020-04-07 北京国双科技有限公司 加密数据处理方法和装置
CN110971581B (zh) * 2018-09-30 2022-05-27 北京国双科技有限公司 加密数据处理方法和装置
CN109656550A (zh) * 2018-12-14 2019-04-19 平安城市建设科技(深圳)有限公司 json数据解析方法、装置、设备及可读存储介质
CN109871519A (zh) * 2019-02-18 2019-06-11 北京思特奇信息技术股份有限公司 一种无层级结构的json反序列化方法、装置及存储介质
CN110008281A (zh) * 2019-04-08 2019-07-12 珠海格力电器股份有限公司 一种基于Redis数据库可视化数据的处理方法及装置
CN110147413A (zh) * 2019-04-26 2019-08-20 平安科技(深圳)有限公司 数据存储方法、数据查询方法、装置、设备及存储介质
CN110147413B (zh) * 2019-04-26 2023-06-02 平安科技(深圳)有限公司 数据存储方法、数据查询方法、装置、设备及存储介质
CN112214212A (zh) * 2020-10-10 2021-01-12 江西洪都航空工业集团有限责任公司 一种根据json格式数据生成c#语言源代码的方法
CN112214212B (zh) * 2020-10-10 2024-04-02 江西洪都航空工业集团有限责任公司 一种根据json格式数据生成c#语言源代码的方法
CN114117992A (zh) * 2021-11-25 2022-03-01 北京力控元通科技有限公司 一种序列化和反序列化方法、装置和电子设备

Also Published As

Publication number Publication date
CN103605518B (zh) 2017-12-19

Similar Documents

Publication Publication Date Title
CN103605518A (zh) 对象反序列化方法和装置
US20220035604A1 (en) Computing Expression Medium, Development Environment, and Device Communication and Control Architecture
US10866685B2 (en) System for providing dynamic linked panels in user interface
CN103593194A (zh) 对象序列化方法和装置
US20140207826A1 (en) Generating xml schema from json data
US8458672B2 (en) Facilitating the utilization of complex data objects
Bézivin et al. Bridging the ms/dsl tools and the eclipse modeling framework
CN109375901A (zh) 接口信息管理方法、装置、计算机设备以及存储介质
US8756407B2 (en) Configuration rule prototyping tool
CN104375818A (zh) 一种通过配置文件实现通用数据格式录入的系统及方法
CN102982010A (zh) 提取文档结构的方法和装置
CN105580002B (zh) 用于执行场所名称修改操作的方法、存储介质和装置
CN105320681A (zh) 一种数据库内容合并方法及装置
CN110704394B (zh) 报表配置修改方法及装置
CN111666100A (zh) 软件框架生成方法、装置、电子设备及存储介质
Zhao et al. Pattern-based design evolution using graph transformation
CN109542404A (zh) 页面组件化的构建方法、装置、存储介质及电子设备
CN111125996B (zh) 一种伪随机激励生成器的基于双向约束树指令集实现方法
US20150088483A1 (en) Simulated component connector definition and connection process
CN111797278A (zh) 一种映射关联对象与关系的方法
CN102193789A (zh) 一种实现可配置跳转链接的方法和设备
CN105793842B (zh) 序列化消息之间的转换方法和装置
CN105989046A (zh) 网站显示方法及系统、以及用户终端
Veeramani et al. Abstract syntax tree based unified modeling language to object oriented code conversion
Soni Full stack angularJS for java developers: Build a full-featured web application from scratch using angularJS with spring RESTful

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 deserialization method and device

Effective date of registration: 20190531

Granted publication date: 20171219

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.