CN101661391B - 一种对象序列化方法、对象反序列化方法、装置及系统 - Google Patents

一种对象序列化方法、对象反序列化方法、装置及系统 Download PDF

Info

Publication number
CN101661391B
CN101661391B CN 200910190251 CN200910190251A CN101661391B CN 101661391 B CN101661391 B CN 101661391B CN 200910190251 CN200910190251 CN 200910190251 CN 200910190251 A CN200910190251 A CN 200910190251A CN 101661391 B CN101661391 B CN 101661391B
Authority
CN
China
Prior art keywords
property value
property
serializing
value
information
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
CN 200910190251
Other languages
English (en)
Other versions
CN101661391A (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.)
Kingdee Software China Co Ltd
Original Assignee
Kingdee Software China 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 Kingdee Software China Co Ltd filed Critical Kingdee Software China Co Ltd
Priority to CN 200910190251 priority Critical patent/CN101661391B/zh
Publication of CN101661391A publication Critical patent/CN101661391A/zh
Application granted granted Critical
Publication of CN101661391B publication Critical patent/CN101661391B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明适用于计算机领域,提供了一种对象序列化方法、对象反序列化方法、装置及系统,所述对象序列化方法包括下述步骤:依次获取对象的各属性名称及属性值;根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化;根据连接方式信息连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称。在本发明实施例中,通过依次获取对象的各属性名称及属性值,并根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化,能完全避免由于对对象所属类的属性进行增加、减少或修改而带来的对象反序列化失败的问题,实现简单、处理效率高。

Description

一种对象序列化方法、对象反序列化方法、装置及系统
技术领域
本发明属于计算机领域,尤其涉及一种对象序列化方法、对象反序列化方法、对象序列化装置、对象反序列化装置及ERP系统。 
背景技术
现有的一种对象序列化方法是将对象整体序列化,然后保存到存储介质中或输出,一个对象序列化的结果对应一个序列化标识serialVersionUID,通过该序列化标识唯一标识各个对象的序列化结果。在需要的时候,将存储或接收到的序列化后的数据反序列化为对象。例如Person类的定义如下: 
Figure GSB00000899881900011
如果将Person类的一个对象person0序列化后,增加、减少或修改了Person类的属性,或者改变了Address类的属性,都将引起对象person0的序列化标识serialVersionUID的变化,这样,再将原来序列化后的文件或数据进行反序列化时,会产生错误、序列化失败。 
为了避免增加、减少或修改了类的属性后,由于该类对应的对象的序列化标识产生变化而造成反序列化失败,在定义Person类的对象person0时,同时显示的定义了对象person0的serialVersionUID值。这样,增加、减少或修改Person类的属性就可以避免对象person0的serialVersionUID值的改变,不会对反序列化操作带来错误。但是,要对所有涉及到的对象都显示定义对象的 serialVersionUID值,才能完全避免由于对类的属性进行增加、减少或修改而带来的反序列化失败的问题,实现复杂、处理效率低,且对于引用了其他的库文件的类,则无法显式定义、修改该类对象的serialVersionUID值。 
发明内容
本发明实施例的目旨在解决现有技术存在的问题,提供一种对象序列化方法,能够完全避免由于对对象所属类的属性进行增加、减少或修改而带来的对象反序列化失败的问题,实现简单、处理效率高。 
本发明实施例是这样实现的,一种对象序列化方法,所述方法包括下述步骤: 
依次获取对象的各属性名称及属性值; 
根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化; 
根据连接方式信息连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称; 
所述根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化的步骤具体包括: 
如果获取到的属性值为基本类型,则序列化该属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对; 
如果获取到的属性值为非基本类型,则循环分解该属性值的各属性,得到为基本类型的子属性值及对应的包括分解信息的属性名称,再序列化得到的子属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对。 
本发明实施例的另一目的在于提供一种对象反序列化方法,所述方法包括下述步骤: 
根据连接方式信息拆分接收到的序列化数据,得到序列化后的属性值及对应的包括分解信息的属性名称; 
根据对象属性信息生成各属性值均为空的反序列化对象; 
根据对象属性信息和得到的序列化后的属性值及对应的包括分解信息的属性名称,给生成的反序列化对象的相应属性值赋值; 
得到的所述序列化后的属性值及对应的包括分解信息的属性名称组成键值对; 
所述根据对象属性信息和得到的序列化后的属性值及对应的包括分解信息的属性名称,给生成的反序列化对象的相应属性值赋值的步骤具体包括: 
根据对象属性信息依次获取生成的反序列化对象包括的各属性名称及对应的属性值类型; 
如果获取到的属性值类型为基本类型,则根据获取到的属性名称在拆分得到的键值对中查找到对应的序列化后的属性值,将查找到的序列化后的属性值反序列化后赋予反序列化对象的相应属性值; 
如果获取到的属性值类型为非基本类型,则根据对象属性信息、获取到的属性名称和拆分得到的键值对生成属性值对象,将生成的属性值对象赋予反序列化对象的相应属性值。 
本发明实施例的另一目的在于提供一种对象序列化装置,所述装置包括: 
对象信息获取单元,用于依次获取对象的各属性名称及属性值; 
序列化单元,用于根据所述对象信息获取单元获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化;以及 
连接单元,用于根据连接方式信息连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称; 
所述序列化单元包括: 
基本类型序列化模块,用于在所述对象信息获取单元获取到的属性值为基本类型时,序列化所述属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对;以及 
非基本类型序列化模块,用于在所述对象信息获取单元获取到的属性值为非基本类型时,循环分解所述属性值的各属性,得到为基本类型的子属性值及对应的包括分解信息的属性名称,再序列化得到的子属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对。
本发明实施例的另一目的在于提供一种对象反序列化装置,所述装置包括: 
序列化数据接收单元,用于根据连接方式信息拆分接收到的序列化数据,得到序列化后的属性值及对应的包括分解信息的属性名称; 
对象生成单元,用于根据对象属性信息生成各属性值均为空的反序列化对象;以及 
反序列化单元,用于根据对象属性信息和所述序列化数据接收单元得到的序列化后的属性值及对应的包括分解信息的属性名称,给所述对象生成单元生成的反序列化对象的相应属性值赋值; 
所述序列化数据接收单元得到的所述序列化后的属性值及对应的包括分解信息的属性名称组成键值对; 
所述反序列化单元包括: 
属性信息获取模块,用于根据对象属性信息依次获取生成的反序列化对象包括的各属性名称及对应的属性值类型; 
基本类型反序列化模块,用于在所述属性信息获取模块获取到的属性值类型为基本类型时,根据获取到的属性名称在所述序列化数据接收单元拆分得到的键值对中查找到对应的序列化后的属性值,将查找到的序列化后的属性值反序列化后赋予反序列化对象的相应属性值;以及 
非基本类型反序列化模块,用于在所述属性信息获取模块获取到的属性值类型为非基本类型时,根据对象属性信息、获取到的属性名称和所述序列化数据接收单元拆分得到的键值对生成属性值对象,将生成的属性值对象赋予反序列化对象的相应属性值。 
在本发明实施例中,通过依次获取对象的各属性名称及属性值,并根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基 本类型后再序列化,实现了一种对象序列化方法,不管对象所属类为自定义类、非自定义类或引用的其他库文件的类,都能完全避免由于对对象所属类的属性进行增加、减少或修改而带来的对象反序列化失败的问题,实现简单、处理效率高。 
附图说明 
图1是本发明实施例提供的对象序列化方法的实现流程图;
图2是本发明实施例提供的对象反序列化方法的实现流程图;
图3是本发明实施例提供的对象序列化装置的结构示意图; 
图4是本发明实施例提供的对象反序列化装置的结构示意图。 
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。 
在本发明实施例中,通过依次获取对象的各属性名称及属性值,并根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化。 
具体实施方式
图1示出了本发明实施例提供的对象序列化方法的实现流程,详述如下: 
在步骤S101中,依次获取对象的各属性名称及属性值; 
在步骤S102中,根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化; 
在步骤S103中,根据连接方式信息连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称。 
任意自定义类或非自定义类的实例即为该自定义类或非自定义类的对象,简称对象,自定义类可以是根据实际需要定义的任意类,非自定义类可以是引用的源代码等中已经定义好的类;对象包括至少一个属性,属性的名称即属性名称,属性对应的值即为属性值,属性值可以为整型、字符型、浮点型、字符串型等程序设计语言支持的基本类型,还可用为非基本类型,非基本类型即为任意自定义类或非自定义类。如果属性值为非基本类型,则可对该属性值进行分解,得到其子属性值及对应的包括分解信息(即分解路径信息)的属性名称,该包括分解信息的属性名称包括分解得到的该子属性值对应的所有上级属性名称及其属性名称。当然,如果获取到的属性值为基本类型,则其对应的属性名称与包括分解信息的属性名称相同。 
上述步骤S102具体包括: 
如果获取到的属性值为基本类型,则序列化该属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对; 
如果获取到的属性值为非基本类型,则循环分解该属性值的各属性,得到为基本类型的子属性值及对应的包括分解信息的属性名称,再序列化得到的子属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对。 
这样,对于为非基本类型的属性值,即属性值为对象,则依次获取该属性值的各子属性名称及子属性值,如果获取到的子属性值为基本类型,则序列化该子属性值,并将序列化后的属性值和对应的包括分解信息的属性名称组成键值对后,再判断下一获取到的属性值;如果获取到的子属性值为非基本类型,则进一步循环分解该子属性值的各属性,得到为基本类型的子属性值后,序列化该子属性值,并将序列化后的属性值和对应的包括分解信息的属性名称组成键值对,再判断下一获取到的属性值。 
在将序列化后的属性值和对应的包括分解信息的属性名称组成键值对时, 用key来存储包括分解信息的属性名称,用value来存储序列化后的属性值。 
在对象的所有属性值都序列化后,将得到的所有键值对,即序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称,按照连接方式信息进行连接。该连接方式信息可以用户输入的,还可以是从其他存储设备、服务器等中获取的;连接键值对的连接方式可以为字符连接,即通过/、*、空格等字符连接得到的所有键值对,该连接方式也可以为序列化连接,即将得到的所有键值对再进行序列化,以连接得到的所有键值对,序列化得到数据即为该对象的序列化结果。在具体实现时,可以采用容器对象来存储步骤S102中得到的所有键值对,在步骤S103中,再序列化该容器对象,以连接得到的所有键值对。 
下面通过一个具体的例子对上述对象序列化方法的过程进行详细描述,假设Person类的定义如下: 
Figure GSB00000899881900071
Address类的定义如下: 
Figure GSB00000899881900072
对于Person类的一个对象person1,其属性名称name对应的属性值为Lily,属性名称telephone对应的属性值为12345678,属性名称address对应的属性值为Address类的对象address1。对于Address类的对象address1,其属性名称 postcode对应的属性值为510000,属性名称state对应的属性值为中国,属性名称city对应的属性值为深圳,属性名称street对应的属性值为深南路。 
在序列化对象person1前,先建一个容器对象c。在将对象person1序列化时,先依次获取该对象的各属性名称及对应的属性值,这里假设先获取到属性名称name对应的属性值为Lily。该属性值为字符串型,属于基本类型,不需要再进行分解,因而序列化后的属性值Lily,得到键值对:key=name、value=属性值Lily的序列化结果,将该键值对放入建好的容器对象c中。完成后,再获取到该对象的属性名称telephone及对应的属性值12345678,同上,由于该属性值为基本类型,则序列化后的属性值12345678,得到键值对:key=telephone、value=属性值12345678的序列化结果,将该键值对放入建好的容器对象c中。 
接着,再获取到该对象的属性名称address及对应的属性值address1,由于属性值address1为Address类的对象,即为非基本类型,所以需要循环分解对象address1的各属性值。在循环分解该对象address1的各属性值时,依次获取其子属性名称及对应的子属性值。假设首先获取到子属性名称postcode及对应的子属性值510000,由于该子属性值已经是基本类型,所以序列化该子属性值510000,其对应的包括分解分析信息的属性名称为address.postcode,得到键值对:key=address.postcode、value=属性值510000的序列化结果,将该键值对对放入建好的容器对象c中。与此相同,还能得到三个键值对:key=address.state、value=属性值中国的序列化结果,key=address.city、value=属性值深圳的序列化结果,key=address.street、value=属性值深南路的序列化结果,将得到的这三个键值对也放入容器对象c中。 
在将对象person1的所有属性值都序列化,得到键值对后,再将容器对象c序列化,得到的结果即为对象person1的序列化结果。 
当然,包括分解信息的属性名称也可以根据需要等采用其他方式来表示,例如,还可以用/、*等符号分隔上、下两级属性名称。 
进一步地,在根据连接方式信息连接序列化得到的所有数据后,存储得到的对象的序列化结果。 
本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等,该程序用来执行如下步骤: 
依次获取对象的各属性名称及属性值; 
根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化; 
根据连接方式信息连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称。 
图2示出了本发明另一实施例提供的与上述对象序列化方法对应的对象反序列化方法的实现流程,详述如下: 
在步骤S201中,根据连接方式信息拆分接收到的序列化数据,得到序列化后的属性值及对应的包括分解信息的属性名称; 
在步骤S202中,根据对象属性信息生成各属性值均为空的反序列化对象; 
在步骤S203中,根据对象属性信息和得到的序列化后的属性值及对应的包括分解信息的属性名称,给生成的反序列化对象的相应属性值赋值。 
其中,反序列化对象即采用对象反序列化方法所要恢复的对象;序列化数据可以从存储设备、数据库、表格、文件、终端等获取;对象属性信息可以是反序列化所涉及到的各对象所属类的定义、各对象包括的属性信息等,反序列化涉及到的对象包括反序列化对象及其属性值或子属性值为非基本类型的对象,由该信息可以知道各对象包括那些属性,其属性名称和属性值类型,这些信息可以存储在存储设备中,还可以从其他数据库、文件、终端等中获取。连接方式信息的定义同上,根据连接方式信息拆分接收到的序列化数据,得到序列化后的属性值及对应的包括分解信息的属性名称,与上述对象序列化方法相 对应,得到的序列化后的属性值及对应的包括分解信息的属性名称组成键值对。拆分接收到的序列化数据的方式与上述连接序列化数据的方式相对应。 
上述步骤S203具体包括: 
根据对象属性信息依次获取生成的反序列化对象包括的各属性名称及对应的属性值类型; 
如果获取到的属性值类型为基本类型,则根据获取到的属性名称在拆分得到的键值对中查找到对应的序列化后的属性值,将查找到的序列化后的属性值反序列化后赋予反序列化对象的相应属性值; 
如果获取到的属性值类型为非基本类型,则根据对象属性信息、获取到的属性名称和拆分得到的键值对生成属性值对象,将生成的属性值对象赋予反序列化对象的相应属性值。 
并且,上述根据对象属性信息、获取到的属性名称和拆分得到的键值对生成属性值对象的步骤具体包括: 
根据对象属性信息和获取到的属性名称生成各子属性值均为空的属性值对象; 
根据对象属性信息依次获取生成的属性值对象包括的各子属性名称及对应的子属性值类型; 
如果获取到的子属性值类型为基本类型,则根据获取到的子属性名称及对应的所有上级属性名称在拆分得到的键值对中查找到对应的序列化后的属性值,将查找到的序列化后的属性值反序列化后赋予该属性值对象的相应属性值; 
如果获取到的子属性值类型为非基本类型,则根据对象属性信息、获取到的子属性名称和拆分得到的键值对生成属性值对象,将生成的属性值对象赋予该属性值对象的相应属性值。 
另外,在上述过程中,在获取到的属性值类型为基本类型时,如果根据获取到的属性名称在拆分得到的键值对中没有查找到对应的属性值,则不作任何操作,反序列化对象的该属性值仍然为空;在获取到的属性值类型为非基本类 型时,如果根据对象属性信息、获取到的属性名称和拆分得到的键值对不能生成属性值对象,则不作任何操作,反序列化对象的该属性值为仍然空。 
下面,通过对Person类的对象person1的序列化数据进行反序列化为例,对上述对象反序列化方法的过程进行详细描述,此时,要构造的对象person1即为反序列化对象。其中,Person类、Address类的定义,以及对象person1的属性值同上,对象属性信息为Person类、Address类的定义。 
首先,接收反序列化对象person1的序列化数据,再将接收到的序列化数据反序列化后得到容器对象c,在容器对象c中存有序列化时得到的键值对,即键值对:key=name,value=属性值Lily的序列化结果,key=telephone、value=属性值12345678的序列化结果,key=address.postcode、value=属性值510000的序列化结果,key=address.state、value=属性值中国的序列化结果,key=address.city、value=属性值深圳的序列化结果,key=address.street、value=属性值深南路的序列化结果等。 
然后,根据Person类的定义,生成各属性值均为空的一反序列化对象person1。 
接着,再根据Person类的定义依次获取生成的反序列化对象person1的各属性名称及对应的属性值类型。先获取到的是属性名称name及对应的字符串型,因为字符串型是基本类型,所以根据获取到的属性名称name在拆分得到的键值对中可以查找到包括分解信息的属性名称的key=name,其对应的vallue=属性值Lily的序列化结果,则将查找到的属性值Lily的序列化结果先进行反序列化,再将反序列化的结果赋予反序列化对象person1属性名称name对应的属性值。同样,还可以给反序列化对象person1的属性名称telephone对应的属性值赋值。 
对于获取到的属性名称address及对应的Address类,因为Address类非基本类型,所以根据Address类的定义,先生成Address类的对象address1,对象address1的各属性值均为空,再依次获取对象address1的各子属性名称及对应 的子属性值类型。首先获取到子属性名称postcode,其子属性值类型为基本类型,所以根据获取到的子属性名称postcode及其所有上级属性名称address在拆分得到的键值对中可以查找到key=address.Postcode,其对应的value=属性值510000的序列化结果,则将查找到的510000的序列化结果先进行反序列化,再将反序列化的结果赋予对象address1属性名称postcode对应的属性值。同样,给对象address1属性名称state、city和street对应的属性值赋值。完成后,将对象address1赋予反序列化对象person1属性名称address对应的属性值。 
当然,如果对象address1还具有某一非基本类型的属性值,则按照上述方法生成该属性值对象,再将生成的属性值对象赋予对象address1的相应属性值。 
进一步地,如果在对象反序列化时,Person类定义中增加了属性sister,其属性名称为sisiter,属性值类型为Person类,仍然能够根据上述对象反序列化方法构造反序列化对象。在进行对象反序列化时,还会获取到属性名称sister和对应的Person类。这时,由于在对象序列化时对象person1没有该属性,序列化数据中没有该序列化后的属性值及对应的包括分解信息的属性名称,所以根据Person类的定义、获取到的属性名称sisiter和拆分得到的键值对生成的属性值对象的各属性值为空,因而反序列化对象person1的该属性值对象的各属性值为空。 
当然,如果在对象反序列化时,Person类定义中删除了属性telephone,仍然能够根据上述对象反序列化方法得到反序列化对象,只是得到的反序列化对象person1也不包括该属性。另外,如果在对象反序列化时,Person类定义中将属性telephone的所属类型修改为整型,或将属性telephone的属性名称修改为phone等,仍然能够根据上述对象反序列化方法得到反序列化对象,只是得到的反序列化对象person1不包括该属性。 
因而采用上述对象反序列化方法,即使后来对象所属类的属性进行了增加、减少或修改,只需要根据后来的对象属性信息和接收到的序列化数据,仍然能够反序列化对象。 
本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等,该程序用来执行如下步骤: 
根据连接方式信息拆分接收到的序列化数据,得到序列化后的属性值及对应的包括分解信息的属性名称; 
根据对象属性信息生成各属性值均为空的反序列化对象; 
根据对象属性信息和得到的序列化后的属性值及对应的包括分解信息的属性名称,给生成的反序列化对象的相应属性值赋值。 
图3示出了本发明实施例提供的对象序列化装置的结构,为了便于说明仅示出了与本发明实施例相关的部分。该对象序列化装置可以用于企业资源计划(Enterprise Resource Planning,ERP)系统,其中: 
对象信息获取单元301,依次获取对象的各属性名称及属性值,其实现方式如上所述,不再赘述; 
序列化单元302,根据对象信息获取单元301获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化; 
连接单元303,根据连接方式信息连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称,其实现方式如上所述,不再赘述。 
并且,序列化单元302包括: 
基本类型序列化模块3021,在对象信息获取单元301获取到的属性值为基本类型时,序列化该属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对,其实现方式如上所述,不再赘述; 
非基本类型序列化模块3022,在对象信息获取单元301获取到的属性值为非基本类型时,循环分解该属性值的各属性,得到为基本类型的子属性值及对应的包括分解信息的属性名称,再序列化得到的子属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对,其实现方式如上所述,不再 赘述。 
在具体实现时,可以采用容器对象来存储序列化单元302得到的所有键值对,连接单元303序列化该容器对象,以连接得到的所有键值对。 
图4示出了本发明实施例提供的对象反序列化装置的结构,为了便于说明仅示出了与本发明实施例相关的部分。该对象反序列化装置可以用于ERP系统,其中: 
序列化数据接收单元401,根据连接方式信息拆分接收到的序列化数据,得到序列化后的属性值及对应的包括分解信息的属性名称。序列化数据接收单元401拆分得到的序列化后的属性值及对应的包括分解信息的属性名称组成键值对其实现方式如上所述,不再赘述; 
对象生成单元402,根据对象属性信息生成各属性值均为空的反序列化对象,不再赘述; 
反序列化单元403,根据对象属性信息和序列化数据接收单元401得到的序列化后的属性值及对应的包括分解信息的属性名称,给对象生成单元402生成的反序列化对象的相应属性值赋值。 
并且,反序列化单元403包括: 
属性信息获取模块4031,根据对象属性信息依次获取生成的反序列化对象包括的各属性名称及对应的属性值类型,其实现方式如上所述,不再赘述; 
基本类型反序列化模块4032,在属性信息获取模块4031获取到的属性值类型为基本类型时,根据获取到的属性名称在序列化数据接收单元401拆分得到的键值对中查找到对应的序列化后的属性值,将查找到的序列化后的属性值反序列化后赋予反序列化对象的相应属性值,其实现方式如上所述,不再赘述; 
非基本类型反序列化模块4033,在属性信息获取模块4031获取到的属性值类型为非基本类型时,根据对象属性信息、获取到的属性名称和序列化数据接收单元401拆分得到的键值对生成属性值对象,将生成的属性值对象赋予反序列化对象的相应属性值,其实现方式如上所述,不再赘述; 
在本发明实施例中,通过依次获取对象的各属性名称及属性值,并根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化,实现了一种对象序列化方法,不管对象所属类为自定义类、非自定义类或引用的其他库文件的类,都能完全避免由于对对象所属类的属性进行增加、减少或修改而带来的对象反序列化失败的问题,实现简单、处理效率高。 
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。 

Claims (7)

1.一种对象序列化方法,其特征在于,所述方法包括下述步骤:
依次获取对象的各属性名称及属性值;
根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化;
根据连接方式信息连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称;
所述根据获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化的步骤具体包括:
如果获取到的属性值为基本类型,则序列化该属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对;
如果获取到的属性值为非基本类型,则循环分解该属性值的各属性,得到为基本类型的子属性值及对应的包括分解信息的属性名称,再序列化得到的子属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对。
2.如权利要求1所述的方法,其特征在于,所述连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称的连接方式为字符连接或序列化连接。
3.一种对象反序列化方法,其特征在于,所述方法包括下述步骤:
根据连接方式信息拆分接收到的序列化数据,得到序列化后的属性值及对应的包括分解信息的属性名称;
根据对象属性信息生成各属性值均为空的反序列化对象;
根据对象属性信息和得到的序列化后的属性值及对应的包括分解信息的属性名称,给生成的反序列化对象的相应属性值赋值;
得到的所述序列化后的属性值及对应的包括分解信息的属性名称组成键值对;
所述根据对象属性信息和得到的序列化后的属性值及对应的包括分解信息 的属性名称,给生成的反序列化对象的相应属性值赋值的步骤具体包括:
根据对象属性信息依次获取生成的反序列化对象包括的各属性名称及对应的属性值类型;
如果获取到的属性值类型为基本类型,则根据获取到的属性名称在拆分得到的键值对中查找到对应的序列化后的属性值,将查找到的序列化后的属性值反序列化后赋予反序列化对象的相应属性值;
如果获取到的属性值类型为非基本类型,则根据对象属性信息、获取到的属性名称和拆分得到的键值对生成属性值对象,将生成的属性值对象赋予反序列化对象的相应属性值。
4.如权利要求3所述的方法,其特征在于,所述根据对象属性信息、获取到的属性名称和拆分得到的键值对生成属性值对象的步骤具体包括:
根据对象属性信息和获取到的属性名称生成各子属性值均为空的属性值对象;
根据对象属性信息依次获取生成的属性值对象包括的各子属性名称及对应的子属性值类型;
如果获取到的子属性值类型为基本类型,则根据获取到的子属性名称及对应的所有上级属性名称在拆分得到的键值对中查找到对应的序列化后的属性值,将查找到的序列化后的属性值反序列化后赋予该属性值对象的相应属性值;
如果获取到的子属性值类型为非基本类型,则根据对象属性信息、获取到的子属性名称和拆分得到的键值对生成属性值对象,将生成的属性值对象赋予该属性值对象的相应属性值。
5.一种对象序列化装置,其特征在于,所述装置包括:
对象信息获取单元,用于依次获取对象的各属性名称及属性值;
序列化单元,用于根据所述对象信息获取单元获取到的属性值所属的类型序列化获取到的属性值或将获取到的属性值分解为基本类型后再序列化;以及
连接单元,用于根据连接方式信息连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称; 所述序列化单元包括: 基本类型序列化模块,用于在所述对象信息获取单元获取到的属性值为基本类型时,序列化所述属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对;以及 非基本类型序列化模块,用于在所述对象信息获取单元获取到的属性值为非基本类型时,循环分解所述属性值的各属性,得到为基本类型的子属性值及对应的包括分解信息的属性名称,再序列化得到的子属性值,将序列化后的属性值和对应的包括分解信息的属性名称组成键值对。
6.如权利要求5所述的装置,其特征在于,所述连接单元连接所有序列化后的属性值及各序列化后的属性值对应的包括分解信息的属性名称的连接方式为字符连接或序列化连接。 
7.一种对象反序列化装置,其特征在于,所述装置包括: 
序列化数据接收单元,用于根据连接方式信息拆分接收到的序列化数据,得到序列化后的属性值及对应的包括分解信息的属性名称; 
对象生成单元,用于根据对象属性信息生成各属性值均为空的反序列化对象;以及 
反序列化单元,用于根据对象属性信息和所述序列化数据接收单元得到的序列化后的属性值及对应的包括分解信息的属性名称,给所述对象生成单元生成的反序列化对象的相应属性值赋值; 
所述序列化数据接收单元得到的所述序列化后的属性值及对应的包括分解信息的属性名称组成键值对; 
所述反序列化单元包括: 
属性信息获取模块,用于根据对象属性信息依次获取生成的反序列化对象包括的各属性名称及对应的属性值类型; 
基本类型反序列化模块,用于在所述属性信息获取模块获取到的属性值类 型为基本类型时,根据获取到的属性名称在所述序列化数据接收单元拆分得到的键值对中查找到对应的序列化后的属性值,将查找到的序列化后的属性值反序列化后赋予反序列化对象的相应属性值;以及 
非基本类型反序列化模块,用于在所述属性信息获取模块获取到的属性值类型为非基本类型时,根据对象属性信息、获取到的属性名称和所述序列化数据接收单元拆分得到的键值对生成属性值对象,将生成的属性值对象赋予反序列化对象的相应属性值。 
CN 200910190251 2009-09-24 2009-09-24 一种对象序列化方法、对象反序列化方法、装置及系统 Active CN101661391B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200910190251 CN101661391B (zh) 2009-09-24 2009-09-24 一种对象序列化方法、对象反序列化方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200910190251 CN101661391B (zh) 2009-09-24 2009-09-24 一种对象序列化方法、对象反序列化方法、装置及系统

Publications (2)

Publication Number Publication Date
CN101661391A CN101661391A (zh) 2010-03-03
CN101661391B true CN101661391B (zh) 2013-08-28

Family

ID=41789440

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910190251 Active CN101661391B (zh) 2009-09-24 2009-09-24 一种对象序列化方法、对象反序列化方法、装置及系统

Country Status (1)

Country Link
CN (1) CN101661391B (zh)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101963944B (zh) * 2010-09-30 2015-04-15 用友软件股份有限公司 对象存储方法和系统
US20130117326A1 (en) * 2011-11-08 2013-05-09 Microsoft Corporation External serialization and deserialization
US9853956B2 (en) 2014-02-11 2017-12-26 Texas Instruments Incorporated JSON encryption and hashing with indication added to key-value
CN105446722B (zh) * 2014-08-29 2019-04-02 优视科技有限公司 序列化方法和装置、以及反序列化方法和装置
CN106155630A (zh) * 2015-04-14 2016-11-23 阿里巴巴集团控股有限公司 序列化方法、反序列化方法、序列化装置及反序列化装置
CN106294385A (zh) * 2015-05-19 2017-01-04 阿里巴巴集团控股有限公司 数据对象序列化和反序列化数据对象的方法及装置
CN107038022B (zh) * 2015-07-13 2021-01-29 阿里巴巴集团控股有限公司 一种反序列化方法及装置
CN106570018B (zh) * 2015-10-10 2021-01-15 阿里巴巴集团控股有限公司 序列化与反序列化的方法、装置、系统以及电子设备
CN106843819B (zh) * 2015-12-03 2020-10-09 北京国双科技有限公司 对象序列化的方法及装置
CN105956085B (zh) * 2016-04-29 2019-08-27 优酷网络技术(北京)有限公司 一种倒排索引的构建方法和装置、检索方法和装置
CN107451237B (zh) * 2017-07-26 2020-09-15 阿里巴巴集团控股有限公司 序列化与反序列化方法、装置及设备
CN108733947B (zh) * 2018-05-29 2021-11-02 郑州云海信息技术有限公司 一种在PCB设计中批量给tab赋属性的方法及装置
CN108897779A (zh) * 2018-06-04 2018-11-27 广州环通信息技术有限公司 一种快速获取表单值和给表单赋值的方法及系统
CN110716712A (zh) * 2018-07-13 2020-01-21 拜椰特(上海)软件技术有限公司 计算机编程语言用字符实现对象的方法
WO2020014807A1 (zh) * 2018-07-16 2020-01-23 拜椰特(上海)软件技术有限公司 计算机编程语言用字符实现对象的方法
CN109117209B (zh) * 2018-07-23 2021-10-01 广州多益网络股份有限公司 序列化和反序列化方法及装置
CN109871519A (zh) * 2019-02-18 2019-06-11 北京思特奇信息技术股份有限公司 一种无层级结构的json反序列化方法、装置及存储介质
CN111756779B (zh) * 2019-03-26 2022-07-26 阿里巴巴集团控股有限公司 数据序列化处理方法、装置及计算机系统
CN111241346B (zh) * 2020-01-15 2023-11-10 上海依图网络科技有限公司 一种对象序列化方法、装置、机器可读介质以及系统
CN111752547A (zh) * 2020-06-30 2020-10-09 武汉虹信技术服务有限责任公司 一种修改Java序列化对象序列号的方法及其应用
CN112286594A (zh) * 2020-10-10 2021-01-29 百度(中国)有限公司 对象序列化和反序列化方法及设备、电子设备和介质
CN116301666B (zh) * 2023-05-17 2023-10-10 杭州数云信息技术有限公司 Java对象序列化方法及其反序列化方法及装置、终端

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1955956A (zh) * 2005-10-28 2007-05-02 北京航空航天大学 基于bpel的图形与xml文档相互转换的方法
CN101137959A (zh) * 2004-01-16 2008-03-05 微软公司 用于跨越远程边界传送计算机可读对象的系统和方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101137959A (zh) * 2004-01-16 2008-03-05 微软公司 用于跨越远程边界传送计算机可读对象的系统和方法
CN1955956A (zh) * 2005-10-28 2007-05-02 北京航空航天大学 基于bpel的图形与xml文档相互转换的方法

Also Published As

Publication number Publication date
CN101661391A (zh) 2010-03-03

Similar Documents

Publication Publication Date Title
CN101661391B (zh) 一种对象序列化方法、对象反序列化方法、装置及系统
CN101620636B (zh) 一种显示表格数据的方法和装置
CN110795399B (zh) 一种为应用产生机器id的方法、装置和系统
CN103077183A (zh) 一种分布式顺序表的数据导入方法及其系统
CN106557307B (zh) 业务数据的处理方法及处理系统
CN111143446A (zh) 数据对象的数据结构转换处理方法、装置及电子设备
CN102707948B (zh) 一种源代码生成方法
CN100511140C (zh) 构件化软件系统实现脚本语言调用多输出参数接口的方法
CN106126299B (zh) 业务插件的处理方法及装置
CN115731313A (zh) Svg格式的图片的处理方法、装置、设备、介质及产品
US8024374B2 (en) Computer object conversion using an intermediate object
CN103049494A (zh) 一种xml文档的表格存储方法及装置
CN105138649A (zh) 数据的搜索方法、装置及终端
CN104361040A (zh) 一种定制查询的方法及装置
CN112765270B (zh) 区块链数据处理方法、装置、计算机设备及介质
JP2000207260A (ja) ハンドヘルド装置のデ―タ記憶およびデ―タ取出しのための方法および装置
CN103577604B (zh) 一种用于Hadoop分布式环境的图像索引结构
CN101369953B (zh) 一种字库的网络分发方法及系统
CN102073688A (zh) 将客户端窗体转化成Web页面的装置及其方法
CN109697234B (zh) 实体的多属性信息查询方法、装置、服务器和介质
CN101702180B (zh) 一种关联字段值的查找方法及系统
CN111198880A (zh) 一种基于redis的数据存储方法、装置及电子设备
CN102855115A (zh) 一种基于拼接墙显示文字标注的方法及系统
CN102799423A (zh) Jsf中执行动态方法的方法及装置
CN112162731B (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