專利名稱:一種對(duì)象序列化方法、對(duì)象反序列化方法、裝置及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)領(lǐng)域,尤其涉及一種對(duì)象序列化方法、對(duì)象反序列化方
法、對(duì)象序列化裝置、對(duì)象反序列化裝置及ERP系統(tǒng)。
背景技術(shù):
現(xiàn)有的一種對(duì)象序列化方法是將對(duì)象整體序列化,然后保存到存儲(chǔ)介質(zhì)中 或輸出, 一個(gè)對(duì)象序列化的結(jié)果對(duì)應(yīng)一個(gè)序列化標(biāo)識(shí)serialVersionUID,通過(guò)該 序列化標(biāo)識(shí)唯一標(biāo)識(shí)各個(gè)對(duì)象的序列化結(jié)果。在需要的時(shí)候,將存儲(chǔ)或接收到 的序列化后的數(shù)據(jù)反序列化為對(duì)象。例如Person類的定義如下 public Class Person Implements Serializable { String name; String telephone; Address address;
如果將Person類的一個(gè)對(duì)象personO序列化后,增力o、減少或修改了 Person 類的屬性,或者改變了 Address類的屬性,都將引起對(duì)象personO的序列化標(biāo)識(shí) serialVersionUID的變化,這樣,再將原來(lái)序列化后的文件或數(shù)據(jù)進(jìn)行反序列化 時(shí),會(huì)產(chǎn)生錯(cuò)誤、序列化失敗。
為了避免增加、減少或修改了類的屬性后,由于該類對(duì)應(yīng)的對(duì)象的序列化 標(biāo)識(shí)產(chǎn)生變化而造成反序列化失敗,在定義Person類的對(duì)象personO時(shí),同時(shí) 顯示的定義了對(duì)象personO的serialVersionUID值。這樣,增加、減少或修改 Person類的屬性就可以避免對(duì)象personO的serialVersionUID值的改變,不會(huì)對(duì) 反序列化操作帶來(lái)錯(cuò)誤。但是,要對(duì)所有涉及到的對(duì)象都顯示定義對(duì)象的serialVersionUID值,才能完全避免由于對(duì)類的屬性進(jìn)行增加、減少或修改而帶 來(lái)的反序列化失敗的問(wèn)題,實(shí)現(xiàn)復(fù)雜、處理效率低,且對(duì)于引用了其他的庫(kù)文 件的類,則無(wú)法顯式定義、修改該類對(duì)象的serialVersionUID值。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目旨在解決現(xiàn)有技術(shù)存在的問(wèn)題,提供一種對(duì)象序列化方 法,能夠完全避免由于對(duì)對(duì)象所屬類的屬性進(jìn)行增加、減少或修改而帶來(lái)的對(duì) 象反序列化失敗的問(wèn)題,實(shí)現(xiàn)簡(jiǎn)單、處理效率高。
本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的, 一種對(duì)象序列化方法,所述方法包括下述步
驟
依次獲取對(duì)象的各屬性名稱及屬性值;
根據(jù)獲取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性 值分解為基本類型后再序列化;
根據(jù)連接方式信息連接所有序列化后的屬性值及各序列化后的屬性值對(duì)應(yīng) 的包括分解信息的屬性名稱。
本發(fā)明實(shí)施例的另一目的在于提供一種對(duì)象反序列化方法,所述方法包括 下述步驟
根據(jù)連接方式信息拆分接收到的序列化數(shù)據(jù),得到序列化后的屬性值及對(duì)
應(yīng)的包括分解信息的屬性名稱;
根據(jù)對(duì)象屬性信息生成各屬性值均為空的反序列化對(duì)象;
根據(jù)對(duì)象屬性信息和得到的序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬
性名稱,給生成的反序列化對(duì)象的相應(yīng)屬性值賦值。
本發(fā)明實(shí)施例的另一目的在于提供一種對(duì)象序列化裝置,所述裝置包括 對(duì)象信息荻取單元,用于依次荻取對(duì)象的各屬性名稱及屬性值; 序列化單元,用于根據(jù)所述對(duì)象信息獲取單元獲取到的屬性值所屬的類型
序列化獲取到的屬性值或?qū)@取到的屬性值分解為基本類型后再序列化;以及連接單元,用于根據(jù)連接方式信息連接所有序列化后的屬性值及各序列化 后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱。
本發(fā)明實(shí)施例的另一目的在于提供一種包含上述對(duì)象序列化裝置的ERP 系統(tǒng)。
本發(fā)明實(shí)施例的另 一 目的在于提供一種對(duì)象反序列化裝置,所述裝置包括 序列化數(shù)據(jù)接收單元,用于根據(jù)連接方式信息拆分接收到的序列化數(shù)據(jù),
得到序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱;
對(duì)象生成單元,用于根據(jù)對(duì)象屬性信息生成各屬性值均為空的反序列化對(duì)
象;以及
反序列化單元,用于根據(jù)對(duì)象屬性信息和所述序列化數(shù)據(jù)接收單元得到的 序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,給所述對(duì)象生成單元生 成的反序列化對(duì)象的相應(yīng)屬性值賦值。
本發(fā)明實(shí)施例的另一目的在于提供一種包含上述對(duì)象反序列化裝置的ERP 系統(tǒng)。
在本發(fā)明實(shí)施例中,通過(guò)依次獲取對(duì)象的各屬性名稱及屬性值,并根據(jù)獲 取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性值分解為基 本類型后再序列化,實(shí)現(xiàn)了一種對(duì)象序列化方法,不管對(duì)象所屬類為自定義類、 非自定義類或引用的其他庫(kù)文件的類,都能完全避免由于對(duì)對(duì)象所屬類的屬性 進(jìn)行增加、減少或修改而帶來(lái)的對(duì)象反序列化失敗的問(wèn)題,實(shí)現(xiàn)簡(jiǎn)單、處理效 率高。
圖1是本發(fā)明實(shí)施例提供的對(duì)象序列化方法的實(shí)現(xiàn)流程圖; 圖2是本發(fā)明實(shí)施例提供的對(duì)象反序列化方法的實(shí)現(xiàn)流程圖; 圖3是本發(fā)明實(shí)施例提供的對(duì)象序列化裝置的結(jié)構(gòu)示意圖; 圖4是本發(fā)明實(shí)施例提供的對(duì)象反序列化裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí) 施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例4又 僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
在本發(fā)明實(shí)施例中,通過(guò)依次獲取對(duì)象的各屬性名稱及屬性值,并根據(jù)獲 取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性值分解為基 本類型后再序列化。
圖1示出了本發(fā)明實(shí)施例提供的對(duì)象序列化方法的實(shí)現(xiàn)流程,詳述如下 在步驟S101中,依次獲取對(duì)象的各屬性名稱及屬性值; 在步驟S102中,根據(jù)獲取到的屬性值所屬的類型序列化獲取到的屬性值或 將獲取到的屬性值分解為基本類型后再序列化;
在步驟S103中,才艮據(jù)連接方式信息連接所有序列化后的屬性值及各序列化 后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱。
任意自定義類或非自定義類的實(shí)例即為該自定義類或非自定義類的對(duì)象, 簡(jiǎn)稱對(duì)象,自定義類可以是根據(jù)實(shí)際需要定義的任意類,非自定義類可以是引 用的源代碼等中已經(jīng)定義好的類;對(duì)象包括至少一個(gè)屬性,屬性的名稱即屬性 名稱,屬性對(duì)應(yīng)的值即為屬性值,屬性值可以為整型、字符型、浮點(diǎn)型、字符 串型等程序設(shè)計(jì)語(yǔ)言支持的基本類型,還可用為非基本類型,非基本類型即為 任意自定義類或非自定義類。如果屬性值為非基本類型,則可對(duì)該屬性值進(jìn)行 分解,得到其子屬性值及對(duì)應(yīng)的包括分解信息(即分解路徑信息)的屬'壓^T 該包括分解信息的屬性名稱包括分解得到的該子屬性值對(duì)應(yīng)的所有上級(jí)屬性名 稱及其屬性名稱。當(dāng)然,如果獲取到的屬性值為基本類型,則其對(duì)應(yīng)的屬性名 稱與包括分解信息的屬性名稱相同。 上述步驟S102具體包括
如果獲取到的屬性值為基本類型,則序列化該屬性值,將序列化后的屬性值和對(duì)應(yīng)的包括分解信息的屬性名稱組成4建值對(duì);
如果獲取到的屬性值為非基本類型,則循環(huán)分解該屬性值的各屬性,得到 為基本類型的子屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,再序列化得到的子 屬性值,將序列化后的屬性值和對(duì)應(yīng)的包括分解信息的屬性名稱組成4建值對(duì)。
這樣,對(duì)于為非基本類型的屬性值,即屬性值為對(duì)象,則依次獲取該屬性 值的各子屬性名稱及子屬性值,如果獲取到的子屬性值為基本類型,則序列化 該子屬性值,并將序列化后的屬性值和對(duì)應(yīng)的包括分解信息的屬性名稱組成鍵 值對(duì)后,再判斷下一獲取到的屬性值;如果獲取到的子屬性值為非基本類型, 則進(jìn)一步循環(huán)分解該子屬性值的各屬性,得到為基本類型的子屬性值后,序列 化該子屬性值,并將序列化后的屬性值和對(duì)應(yīng)的包括分解信息的屬性名稱組成 鍵值對(duì),再判斷下一獲取到的屬性值。
在將序列化后的屬性值和對(duì)應(yīng)的包括分解信息的屬性名稱組成^t值對(duì)時(shí), 用key來(lái)存儲(chǔ)包括分解信息的屬性名稱,用value來(lái)存儲(chǔ)序列化后的屬性值。
在對(duì)象的所有屬性值都序列化后,將得到的所有鍵值對(duì),即序列化后的屬 性值及各序列化后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱,按照連接方式信 息進(jìn)行連接。該連接方式信息可以用戶輸入的,還可以是從其他存儲(chǔ)設(shè)備、月良 務(wù)器等中獲取的;連接鍵值對(duì)的連接方式可以為字符連接,即通過(guò)/、 *、空格 等字符連接得到的所有鍵值對(duì),該連接方式也可以為序列化連接,即將得到的 所有4建值對(duì)再進(jìn)行序列化,以連接得到的所有4定值對(duì),序列化得到^t據(jù)即為該 對(duì)象的序列化結(jié)果。在具體實(shí)現(xiàn)時(shí),可以采用容器對(duì)象來(lái)存儲(chǔ)步驟S102中得到 的所有鍵值對(duì),在步驟S103中,再序列化該容器對(duì)象,以連接得到的所有鍵:值 對(duì)。
下面通過(guò)一個(gè)具體的例子對(duì)上述對(duì)象序列化方法的過(guò)程進(jìn)行詳細(xì)描述,假 i殳Person類的定義3口下
public Class Person Implements Serializable { String name jString telephone; Address address;
Address類的定義:^下
public Class Address Implements Serializable {
Int postcode;
String state;
String city;
String street;
對(duì)于Person類的一個(gè)對(duì)象personl,其屬性名稱 name對(duì)應(yīng)的屬性值為L(zhǎng)ily, 屬性名稱telephone對(duì)應(yīng)的屬性值為12345678,屬性名稱address對(duì)應(yīng)的屬性值 為Address類的對(duì)象addressl。對(duì)于Address類的對(duì)象addressl,其屬性名稱 postcode對(duì)應(yīng)的屬性值為510000,屬性名稱state對(duì)應(yīng)的屬性值為中國(guó),屬性名 稱city對(duì)應(yīng)的屬性值為深圳,屬性名稱street對(duì)應(yīng)的屬性值為深南路。
在序列化對(duì)象personl前,先建一個(gè)容器對(duì)象c。在將對(duì)象personl序列化 時(shí),先依次獲取該對(duì)象的各屬性名稱及對(duì)應(yīng)的屬性值,這里假設(shè)先獲取到屬性 名稱name對(duì)應(yīng)的屬性值為L(zhǎng)ily。該屬性值為字符串型,屬于基本類型,不需 要再進(jìn)行分解,因而序列化后的屬性值Lily,得到鍵值對(duì)key-name、 value =屬性值Lily的序列化結(jié)果,將該鍵值對(duì)放入建好的容器對(duì)象c中。完成后, 再獲取到該對(duì)象的屬性名稱telephone及對(duì)應(yīng)的屬性值12345678,同上,由于 該屬性值為基本類型,則序列化后的屬性值12345678,得到鍵值對(duì)key-telephone, value-屬性值12345678的序列化結(jié)果,將該鍵:值對(duì)放入建好的容 器對(duì)象c中。
接著,再獲取到該對(duì)象的屬性名稱address及對(duì)應(yīng)的屬性值addressl,由于 屬性值addressl為Address類的對(duì)象,即為非基本類型,所以需要循環(huán)分解對(duì)
象addressl的各屬性值。在循環(huán)分解該對(duì)象addressl的各屬性值時(shí),依次獲取其子屬性名稱及對(duì)應(yīng)的子屬性值。假設(shè)首先獲取到子屬性名稱postcode及對(duì)應(yīng) 的子屬性值510000,由于該子屬性值已經(jīng)是基本類型,所以序列化該子屬性值 510000,其對(duì)應(yīng)的包括分解分析信息的屬性名稱為address.postcode,得到4定值 對(duì)key = address.postcode、 value =屬性值510000的序列化結(jié)果,將該鍵:值對(duì) 對(duì)放入建好的容器對(duì)象c中。與此相同,還能得到三個(gè)鍵值對(duì)key = address.state 、 value =屬性值中國(guó)的序列化結(jié)果,key = address.city 、 value =屬 性值深圳的序列化結(jié)果,key = address.street、 value =屬性值深南路的序列化結(jié) 果,將得到的這三個(gè)鍵:值對(duì)也放入容器對(duì)象c中。
在將對(duì)象personl的所有屬性值都序列化,得到鍵:值對(duì)后,再將容器對(duì)象c 序列化,得到的結(jié)果即為對(duì)象personl的序列化結(jié)果。
當(dāng)然,包括分解信息的屬性名稱也可以根據(jù)需要等采用其他方式來(lái)表示, 例如,還可以用/、 *等符號(hào)分隔上、下兩級(jí)屬性名稱。
進(jìn)一步地,在根據(jù)連接方式信息連接序列化得到的所有數(shù)據(jù)后,存儲(chǔ)得到 的對(duì)象的序列化結(jié)果。
本領(lǐng)域普通技術(shù)人員可以理解,實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟 是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以在存儲(chǔ)于一計(jì)算機(jī) 可讀取存儲(chǔ)介質(zhì)中,所述的存儲(chǔ)介質(zhì),如ROM/RAM、磁盤、光盤等,該程序 用來(lái)執(zhí)行如下步驟
依次獲取對(duì)象的各屬性名稱及屬性值;
根據(jù)獲取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性 值分解為基本類型后再序列化;
根據(jù)連接方式信息連接所有序列化后的屬性值及各序列化后的屬性值對(duì)應(yīng) 的包括分解信息的屬性名稱。
圖2示出了本發(fā)明另一實(shí)施例提供的與上述對(duì)象序列化方法對(duì)應(yīng)的對(duì)象反 序列化方法的實(shí)現(xiàn)流程,詳述如下
在步驟S201中,根據(jù)連接方式信息拆分接收到的序列化數(shù)據(jù),得到序列化7后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱;
在步驟S202中,4艮據(jù)對(duì)象屬性信息生成各屬性值均為空的反序列化對(duì)象;
在步驟S203中,根據(jù)對(duì)象屬性信息和得到的序列化后的屬性值及對(duì)應(yīng)的包 括分解信息的屬性名稱,給生成的反序列化對(duì)象的相應(yīng)屬性值賦值。
其中,反序列化對(duì)象即采用對(duì)象反序列化方法所要恢復(fù)的對(duì)象;序列化數(shù) 據(jù)可以從存儲(chǔ)設(shè)備、數(shù)據(jù)庫(kù)、表格、文件、終端等獲?。粚?duì)象屬性信息可以是 反序列化所涉及到的各對(duì)象所屬類的定義、各對(duì)象包括的屬性信息等,反序列 化涉及到的對(duì)象包括反序列化對(duì)象及其屬性值或子屬性值為非基本類型的對(duì) 象,由該信息可以知道各對(duì)象包括那些屬性,其屬性名稱和屬性值類型,這些 信息可以存儲(chǔ)在存儲(chǔ)設(shè)備中,還可以從其他數(shù)據(jù)庫(kù)、文件、終端等中獲取。連 接方式信息的定義同上,根據(jù)連接方式信息拆分接收到的序列化數(shù)據(jù),得到序 列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,與上述對(duì)象序列化方法相 對(duì)應(yīng),得到的序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱組成4建值對(duì)。 拆分接收到的序列化數(shù)據(jù)的方式與上述連接序列化凄t據(jù)的方式相對(duì)應(yīng)。
上述步驟S203具體包括
根據(jù)對(duì)象屬性信息依次獲取生成的反序列化對(duì)象包括的各屬性名稱及對(duì)應(yīng) 的屬性值類型;
如果獲取到的屬性值類型為基本類型,則根據(jù)獲取到的屬性名稱在拆分得 到的鍵值對(duì)中查找到對(duì)應(yīng)的序列化后的屬性值,將查找到的序列化后的屬性值 反序列化后賦予反序列化對(duì)象的相應(yīng)屬性值;
如果獲取到的屬性值類型為非基本類型,則根據(jù)對(duì)象屬性信息、獲取到的 屬性名稱和拆分得到的4建值對(duì)生成屬性值對(duì)象,將生成的屬性值對(duì)象賦予M 列化對(duì)象的相應(yīng)屬性值。
并且,上述根據(jù)對(duì)象屬性信息、獲取到的屬性名稱和拆分得到的鍵值對(duì)生 成屬性值對(duì)象的步驟具體包括
根據(jù)對(duì)象屬性信息和獲取到的屬性名稱生成各子屬性值均為空的屬性值對(duì)象;
根據(jù)對(duì)象屬性信息依次獲取生成的屬性值對(duì)象包括的各子屬性名稱及對(duì)應(yīng)
的子屬性值類型;
如果獲取到的子屬性值類型為基本類型,則根據(jù)獲取到的子屬性名稱及對(duì) 應(yīng)的所有上級(jí)屬性名稱在拆分得到的鍵值對(duì)中查找到對(duì)應(yīng)的序列化后的屬性
值,將查找到的序列化后的屬性值反序列化后賦予該屬性值對(duì)象的相應(yīng)屬性值;
如果獲取到的子屬性值類型為非基本類型,則根據(jù)對(duì)象屬性信息、獲取到 的子屬性名稱和拆分得到的鍵值對(duì)生成屬性值對(duì)象,將生成的屬性值對(duì)象賦予 該屬性值對(duì)象的相應(yīng)屬性值。
另外,在上述過(guò)程中,在獲取到的屬性值類型為基本類型時(shí),如果根據(jù)獲
取到的屬性名稱在拆分得到的鍵:值對(duì)中沒(méi)有查找到對(duì)應(yīng)的屬性值,則不作任何 操作,反序列化對(duì)象的該屬性值仍然為空;在獲取到的屬性值類型為非基本類 型時(shí),如果纟艮據(jù)對(duì)象屬性信息、獲取到的屬性名稱和拆分得到的4定值對(duì)不能生 成屬性值對(duì)象,則不作任何操作,反序列化對(duì)象的該屬性值為仍然空。
下面,通過(guò)對(duì)Person類的對(duì)象personl的序列化數(shù)據(jù)進(jìn)行反序列化為例, 對(duì)上述對(duì)象反序列化方法的過(guò)程進(jìn)行詳細(xì)描述,此時(shí),要構(gòu)造的對(duì)象personl 即為反序列化對(duì)象。其中,Person類、Address類的定義,以及對(duì)象personl的 屬性值同上,對(duì)象屬性信息為Person類、Address類的定義。
首先,接收反序列化對(duì)象personl的序列化數(shù)據(jù),再將接收到的序列化數(shù) 據(jù)反序列化后得到容器對(duì)象c,在容器對(duì)象c中存有序列化時(shí)得到的鍵值對(duì), 即鍵值對(duì)key = name, value -屬性值Lily的序列化結(jié)果,key = tdephone、 value =屬性值12345678的序列化結(jié)果,key = address.postcode、value =屬性值510000 的序列化結(jié)果,key = address.state、 value =屬性值中國(guó)的序列化結(jié)果,key = address.city、 value =屬性值深圳的序列化結(jié)果,key = address.street、 value =屬 性值深南路的序列化結(jié)果等。
然后,根據(jù)Person類的定義,生成各屬性值均為空的一反序列化對(duì)象person 1。
接著,再根據(jù)Person類的定義依次獲取生成的反序列化對(duì)象personl的各 屬性名稱及對(duì)應(yīng)的屬性值類型。先獲取到的是屬性名稱name及對(duì)應(yīng)的字符串 型,因?yàn)樽址褪腔绢愋?,所以根?jù)獲取到的屬性名稱name在拆分得到 的鍵值對(duì)中可以查找到包括分解信息的屬性名稱的key = name,其對(duì)應(yīng)的vallue =屬性值Lily的序列化結(jié)果,則將查找到的屬性值Lily的序列化結(jié)果先進(jìn)行反 序列化,再將反序列化的結(jié)果賦予反序列化對(duì)象personl屬性名稱name對(duì)應(yīng)的 屬性值。同樣,還可以給反序列化對(duì)象personl的屬性名稱telephone對(duì)應(yīng)的屬 性值賦值。
對(duì)于獲取到的屬性名稱address及對(duì)應(yīng)的Address類,因?yàn)锳ddress類非基 本類型,所以根據(jù)Address類的定義,先生成Address類的對(duì)象address 1,對(duì)象 addressl的各屬性值均為空,再依次獲取對(duì)象address 1的各子屬性名稱及對(duì)應(yīng) 的子屬性值類型。首先獲取到子屬性名稱postcode,其子屬性值類型為基本類 型,所以根據(jù)獲取到的子屬性名稱postcode及其所有上級(jí)屬性名稱address在拆 分得到的鍵值對(duì)中可以查找到key = address. Postcode,其對(duì)應(yīng)的value =屬性值 510000的序列化結(jié)果,則將查找到的510000的序列化結(jié)果先進(jìn)行反序列化, 再將反序列化的結(jié)果賦予對(duì)象addressl屬性名稱postcode對(duì)應(yīng)的屬性值。同樣, 給對(duì)象addressl屬性名稱state、 city和street對(duì)應(yīng)的屬性值賦值。完成后,將對(duì) 象addressl賦予^^列化對(duì)象personl屬性名稱address對(duì)應(yīng)的屬性值。
當(dāng)然,如果對(duì)象addressl還具有某一非基本類型的屬性值,則按照上述方 法生成該屬性值對(duì)象,再將生成的屬性值對(duì)象賦予對(duì)象addressl的相應(yīng)屬性值。
進(jìn)一步地,如果在對(duì)象反序列化時(shí),Person類定義中增加了屬性sister,其 屬性名稱為sisiter,屬性值類型為Person類,仍然能夠根據(jù)上述對(duì)象反序列化 方法構(gòu)造反序列化對(duì)象。在進(jìn)行對(duì)象反序列化時(shí),還會(huì)獲取到屬性名稱sister 和對(duì)應(yīng)的Person類。這時(shí),由于在對(duì)象序列化時(shí)對(duì)象personl沒(méi)有該屬性,序 列化數(shù)據(jù)中沒(méi)有該序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,所以根據(jù)Person類的定義、獲取到的屬性名稱sisiter和拆分得到的鍵值對(duì)生成的屬 性值對(duì)象的各屬性值為空,因而反序列化對(duì)象personl的該屬性值對(duì)象的各屬 性值為空。
當(dāng)然,如果在對(duì)象反序列化時(shí),Person類定義中刪除了屬性telephone,仍 然能夠根據(jù)上述對(duì)象反序列化方法得到反序列化對(duì)象,只是得到的反序列化對(duì) 象personl也不包括該屬性。另外,如果在對(duì)象反序列化時(shí),Person類定義中 將屬性telephone的所屬類型^f奮改為整型,或?qū)傩詔elephone的屬性名稱^^改 為phone等,仍然能夠根據(jù)上述對(duì)象反序列化方法得到反序列化對(duì)象,只是得 到的反序列化對(duì)象personl不包括該屬性。
因而采用上述對(duì)象反序列化方法,即使后來(lái)對(duì)象所屬類的屬性進(jìn)行了增加、 減少或修改,只需要#4居后來(lái)的對(duì)象屬性信息和接收到的序列化數(shù)據(jù),仍然能 夠反序列化對(duì)象。
本領(lǐng)域普通技術(shù)人員可以理解,實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟 是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以在存儲(chǔ)于一計(jì)算機(jī) 可讀取存儲(chǔ)介質(zhì)中,所述的存儲(chǔ)介質(zhì),如ROM/RAM、磁盤、光盤等,該程序 用來(lái)執(zhí)行如下步驟
根據(jù)連接方式信息拆分接收到的序列化數(shù)據(jù),得到序列化后的屬性值及對(duì) 應(yīng)的包括分解信息的屬性名稱;
根據(jù)對(duì)象屬性信息生成各屬性值均為空的反序列化對(duì)象;
根據(jù)對(duì)象屬性信息和得到的序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬 性名稱,給生成的反序列化對(duì)象的相應(yīng)屬性值賦值。
圖3示出了本發(fā)明實(shí)施例提供的對(duì)象序列化裝置的結(jié)構(gòu),為了便于說(shuō)明僅 示出了與本發(fā)明實(shí)施例相關(guān)的部分。該對(duì)象序列化裝置可以用于企業(yè)資源計(jì)劃 (Enterprise Resource Planning, ERP)系統(tǒng),其中
對(duì)象信息獲取單元301,依次獲取對(duì)象的各屬性名稱及屬性值,其實(shí)現(xiàn)方 式如上所述,不再贅述;序列化單元302,根據(jù)對(duì)象信息獲取單元301獲取到的屬性值所屬的類型
序列化獲取到的屬性值或?qū)@取到的屬性值分解為基本類型后再序列化;
連接單元303,根據(jù)連接方式信息連接所有序列化后的屬性值及各序列化 后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱,其實(shí)現(xiàn)方式如上所述,不再贅述。 并且,序列化單元302包括
基本類型序列化模塊3021,在對(duì)象信息獲取單元301獲取到的屬性值為基 本類型時(shí),序列化該屬性值,將序列化后的屬性值和對(duì)應(yīng)的包括分解信息的屬 性名稱組成鍵值對(duì),其實(shí)現(xiàn)方式如上所述,不再贅述;
非基本類型序列化模塊3022,在對(duì)象信息獲取單元301獲取到的屬性值為 非基本類型時(shí),循環(huán)分解該屬性值的各屬性,得到為基本類型的子屬性值及對(duì) 應(yīng)的包括分解信息的屬性名稱,再序列化得到的子屬性值,將序列化后的屬性 值和對(duì)應(yīng)的包括分解信息的屬性名稱組成4定值對(duì),其實(shí)現(xiàn)方式如上所述,不再 贅述。
在具體實(shí)現(xiàn)時(shí),可以采用容器對(duì)象來(lái)存儲(chǔ)序列化單元302得到的所有4建值 對(duì),連接單元303序列化該容器對(duì)象,以連接得到的所有鍵值對(duì)。
圖4示出了本發(fā)明實(shí)施例提供的對(duì)象反序列化裝置的結(jié)構(gòu),為了便于說(shuō)明 僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。該對(duì)象反序列化裝置可以用于ERP系 統(tǒng),其中
序列化數(shù)據(jù)接收單元401,才艮據(jù)連接方式信息拆分接收到的序列化數(shù)據(jù), 得到序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱。序列化數(shù)據(jù)接收單 元401拆分得到的序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱組成鍵: 值對(duì)其實(shí)現(xiàn)方式如上所述,不再贅述;
對(duì)象生成單元402,根據(jù)對(duì)象屬性信息生成各屬性值均為空的反序列化對(duì) 象,不再贅述;
反序列化單元403,根據(jù)對(duì)象屬性信息和序列化數(shù)據(jù)接收單元401得到的 序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,給對(duì)象生成單元402生成的反序列化對(duì)象的相應(yīng)屬性值賦值。
并且,反序列化單元403包括
屬性信息獲取模塊4031 ,根據(jù)對(duì)象屬性信息依次獲取生成的反序列化對(duì)象 包括的各屬性名稱及對(duì)應(yīng)的屬性值類型,其實(shí)現(xiàn)方式如上所述,不再贅述;
基本類型反序列化模塊4032,在屬性信息獲取模塊4031獲取到的屬性值 類型為基本類型時(shí),根據(jù)獲取到的屬性名稱在序列化數(shù)據(jù)接收單元401拆分得 到的鍵值對(duì)中查找到對(duì)應(yīng)的序列化后的屬性值,將查找到的序列化后的屬性值 反序列化后賦予反序列化對(duì)象的相應(yīng)屬性值,其實(shí)現(xiàn)方式如上所述,不再贅述;
非基本類型反序列化模塊4033,在屬性信息獲取模塊4031獲取到的屬性 值類型為非基本類型時(shí),根據(jù)對(duì)象屬性信息、獲取到的屬性名稱和序列化數(shù)據(jù) 接收單元401拆分得到的鍵值對(duì)生成屬性值對(duì)象,將生成的屬性值對(duì)象賦予反 序列化對(duì)象的相應(yīng)屬性值,其實(shí)現(xiàn)方式如上所述,不再贅述;
在本發(fā)明實(shí)施例中,通過(guò)依次獲取對(duì)象的各屬性名稱及屬性值,并根據(jù)獲 取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性值分解為基 本類型后再序列化,實(shí)現(xiàn)了一種對(duì)象序列化方法,不管對(duì)象所屬類為自定義類、 非自定義類或引用的其他庫(kù)文件的類,都能完全避免由于對(duì)對(duì)象所屬類的屬性 進(jìn)行增加、減少或修改而帶來(lái)的對(duì)象反序列化失敗的問(wèn)題,實(shí)現(xiàn)簡(jiǎn)單、處理效 率高。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā) 明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明 的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種對(duì)象序列化方法,其特征在于,所述方法包括下述步驟依次獲取對(duì)象的各屬性名稱及屬性值;根據(jù)獲取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性值分解為基本類型后再序列化;根據(jù)連接方式信息連接所有序列化后的屬性值及各序列化后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱。
2、 如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)獲取到的屬性值所屬 的類型序列化獲取到的屬性值或?qū)@取到的屬性值分解為基本類型后再序列化 的步驟具體包括如果獲取到的屬性值為基本類型,則序列化該屬性值,將序列化后的屬性 值和對(duì)應(yīng)的包括分解信息的屬性名稱組成鍵值對(duì);如果獲取到的屬性值為非基本類型,則循環(huán)分解該屬性值的各屬性,得到 為基本類型的子屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,再序列化得到的子 屬性值,將序列化后的屬性值和對(duì)應(yīng)的包括分解信息的屬性名稱組成鍵:值對(duì)。
3、 如權(quán)利要求l所述的方法,其特征在于,所述連接所有序列化后的屬性 值及各序列化后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱的連接方式為字符連 接或序列化連接。
4、 一種對(duì)象反序列化方法,其特征在于,所述方法包括下述步驟 根據(jù)連接方式信息拆分接收到的序列化數(shù)據(jù),得到序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱;才艮據(jù)對(duì)象屬性信息生成各屬性值均為空的反序列化對(duì)象;根據(jù)對(duì)象屬性信息和得到的序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,給生成的反序列化對(duì)象的相應(yīng)屬性值賦值。
5 、 如權(quán)利要求4所述的方法,其特征在于,得到的所述序列化后的屬性值 及對(duì)應(yīng)的包括分解信息的屬性名稱組成4建值對(duì)。
6、 如權(quán)利要求5所述的方法,其特征在于,所述根據(jù)對(duì)象屬性信息和得到 的序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,給生成的反序列化對(duì) 象的相應(yīng)屬性值賦值的步驟具體包括根據(jù)對(duì)象屬性信息依次獲取生成的反序列化對(duì)象包括的各屬性名稱及對(duì)應(yīng) 的屬性值類型;如果獲取到的屬性值類型為基本類型,則根據(jù)獲取到的屬性名稱在拆分得 到的鍵值對(duì)中查找到對(duì)應(yīng)的序列化后的屬性值,將查找到的序列化后的屬性值 反序列化后賦予反序列化對(duì)象的相應(yīng)屬性值;如果獲取到的屬性值類型為非基本類型,則根據(jù)對(duì)象屬性信息、獲取到的 屬性名稱和拆分得到的鍵:值對(duì)生成屬性值對(duì)象,將生成的屬性值對(duì)象賦予M 列化對(duì)象的相應(yīng)屬性值。
7、 如權(quán)利要求6所述的方法,其特征在于,所述根據(jù)對(duì)象屬性信息、獲取 到的屬性名稱和拆分得到的4建值對(duì)生成屬性值對(duì)象的步驟具體包括根據(jù)對(duì)象屬性信息和獲取到的屬性名稱生成各子屬性值均為空的屬性值對(duì)象;根據(jù)對(duì)象屬性信息依次獲取生成的屬性值對(duì)象包括的各子屬性名稱及對(duì)應(yīng) 的子屬性值類型;如果獲取到的子屬性值類型為基本類型,則根據(jù)獲取到的子屬性名稱及對(duì) 應(yīng)的所有上級(jí)屬性名稱在拆分得到的鍵值對(duì)中查找到對(duì)應(yīng)的序列化后的屬性 值,將查找到的序列化后的屬性值反序列化后賦予該屬性值對(duì)象的相應(yīng)屬性值;如果獲取到的子屬性值類型為非基本類型,則根據(jù)對(duì)象屬性信息、獲取到 的子屬性名稱和拆分得到的鍵值對(duì)生成屬性值對(duì)象,將生成的屬性值對(duì)象賦予 該屬性值對(duì)象的相應(yīng)屬性值。
8、 一種對(duì)象序列化裝置,其特征在于,所述裝置包括 對(duì)象信息獲取單元,用于依次獲取對(duì)象的各屬性名稱及屬性值; 序列化單元,用于根據(jù)所述對(duì)象信息獲取單元獲取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性值分解為基本類型后再序列化;以及 連接單元,用于根據(jù)連接方式信息連接所有序列化后的屬性值及各序列化 后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱。
9、 如權(quán)利要求8所述的裝置,其特征在于,所述序列化單元包括 基本類型序列化才莫塊,用于在所述對(duì)象信息獲取單元獲取到的屬性值為基本類型時(shí),序列化所述屬性值,將序列化后的屬性值和對(duì)應(yīng)的包括分解信息的 屬性名稱組成鍵值對(duì);以及非基本類型序列化模塊,用于在所述對(duì)象信息獲取單元獲取到的屬性值為 非基本類型時(shí),循環(huán)分解所述屬性值的各屬性,得到為基本類型的子屬性值及 對(duì)應(yīng)的包括分解信息的屬性名稱,再序列化得到的子屬性值,將序列化后的屬 性值和對(duì)應(yīng)的包括分解信息的屬性名稱組成鍵值對(duì)。
10、 如權(quán)利要求8所述的裝置,其特征在于,所述連接單元連接所有序列 化后的屬性值及各序列化后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱的連接方 式為字符連接或序列化連接。
11、 一種包含權(quán)利要求8至10任一項(xiàng)所述對(duì)象序列化裝置的ERP系統(tǒng)。
12、 一種對(duì)象反序列化裝置,其特征在于,所述裝置包括 序列化數(shù)據(jù)接收單元,用于根據(jù)連接方式信息拆分接收到的序列化數(shù)據(jù),得到序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱;對(duì)象生成單元,用于根據(jù)對(duì)象屬性信息生成各屬性值均為空的反序列化對(duì) 象;以及反序列化單元,用于才艮據(jù)對(duì)象屬性信息和所述序列化數(shù)據(jù)接收單元得到的 序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱,給所述對(duì)象生成單元生 成的反序列化對(duì)象的相應(yīng)屬性值賦值。
13、 如權(quán)利要求12所述的裝置,其特征在于,所述序列化數(shù)據(jù)接收單元得 到的所述序列化后的屬性值及對(duì)應(yīng)的包括分解信息的屬性名稱組成鍵值對(duì)。
14、 如權(quán)利要求13所述的裝置,其特征在于,所述反序列化單元包括屬性信息獲取模塊,用于根據(jù)對(duì)象屬性信息依次獲取生成的反序列化對(duì)象包括的各屬性名稱及對(duì)應(yīng)的屬性值類型;基本類型反序列化模塊,用于在所述屬性信息獲取模塊獲取到的屬性值類 型為基本類型時(shí),根據(jù)獲取到的屬性名稱在所述序列化數(shù)據(jù)接收單元拆分得到 的鍵值對(duì)中查找到對(duì)應(yīng)的序列化后的屬性值,將查找到的序列化后的屬性值反 序列化后賦予反序列化對(duì)象的相應(yīng)屬性值;以及非基本類型反序列化模塊,用于在所述屬性信息獲取模塊獲取到的屬性值 類型為非基本類型時(shí),根據(jù)對(duì)象屬性信息、獲取到的屬性名稱和所述序列化數(shù) 據(jù)接收單元拆分得到的鍵值對(duì)生成屬性值對(duì)象,將生成的屬性值對(duì)象賦予反序列化對(duì)象的相應(yīng)屬性值。
15、一種包含權(quán)利要求12至15任一項(xiàng)所述對(duì)象反序列化裝置的ERP系統(tǒng)。
全文摘要
本發(fā)明適用于計(jì)算機(jī)領(lǐng)域,提供了一種對(duì)象序列化方法、對(duì)象反序列化方法、裝置及系統(tǒng),所述對(duì)象序列化方法包括下述步驟依次獲取對(duì)象的各屬性名稱及屬性值;根據(jù)獲取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性值分解為基本類型后再序列化;根據(jù)連接方式信息連接所有序列化后的屬性值及各序列化后的屬性值對(duì)應(yīng)的包括分解信息的屬性名稱。在本發(fā)明實(shí)施例中,通過(guò)依次獲取對(duì)象的各屬性名稱及屬性值,并根據(jù)獲取到的屬性值所屬的類型序列化獲取到的屬性值或?qū)@取到的屬性值分解為基本類型后再序列化,能完全避免由于對(duì)對(duì)象所屬類的屬性進(jìn)行增加、減少或修改而帶來(lái)的對(duì)象反序列化失敗的問(wèn)題,實(shí)現(xiàn)簡(jiǎn)單、處理效率高。
文檔編號(hào)G06F9/44GK101661391SQ20091019025
公開日2010年3月3日 申請(qǐng)日期2009年9月24日 優(yōu)先權(quán)日2009年9月24日
發(fā)明者瀾 曹 申請(qǐng)人:金蝶軟件(中國(guó))有限公司