對象反序列化方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種對象反序列化方法和裝置。其中,對象反序列化方法包括:獲取目標字符串;創(chuàng)建與所述目標字符串對應的Json對象,所述Json對象為具有Json屬性的設置操作的類;將所述目標字符串轉(zhuǎn)化為所述Json對象;以及由所述Json對象生成所述目標字符串的對象。通過本發(fā)明,避免了Json字符串內(nèi)容與目標對象不匹配,而導致的反序列化失敗的問題,達到了成功反序列化的效果。
【專利說明】對象反序列化方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)領(lǐng)域,具體而言,涉及一種對象反序列化方法和裝置。
【背景技術(shù)】
[0002]JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。它基于JavaScript (Standard ECMA_2623rd Edition_Decemberl999)腳本語言的一個子集。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C,C++,C#,Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易于機器解析和生成。
[0003]序列化(Serialization)將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程。在序列化期間,對象將其當前狀態(tài)寫入到臨時或持久性存儲區(qū)。以后,可以通過從存儲區(qū)中讀取或反序列化對象的狀態(tài),重新創(chuàng)建該對象。上述中的對象(Object)就是客觀世界中存在的人、事、物體等實體在計算機邏輯中的映射。
[0004]反序列化(Deserialization)與序列化相對的是反序列化,它將Json字符串形式的數(shù)據(jù)流轉(zhuǎn)換為對象。這兩個過程結(jié)合起來,可以輕松地存儲和傳輸數(shù)據(jù)。
[0005]目前,針對不同的語言框架,對Json字符串的反序列化通常使用語言框架內(nèi)置的反序列化類,對目標對象進行反序列化。采用這種方式進行反序列化必須滿足Json字符串的內(nèi)容與目標對象結(jié)構(gòu)嚴格映射,在此情況下,容易產(chǎn)生Json字符串的內(nèi)容與目標對象不匹配,從而導致反序列化失敗。
[0006]針對現(xiàn)有技術(shù)中容易產(chǎn)生Json字符串的內(nèi)容與目標對象不匹配的問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的主要目的在于提供一種對象反序列化方法和裝置,以解決容易產(chǎn)生Json字符串的內(nèi)容與目標對象不匹配的問題。
[0008]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了 一種對象反序列化方法。根據(jù)本發(fā)明的對象反序列化方法包括:獲取目標字符串;創(chuàng)建與所述目標字符串對應的Json對象,所述Json對象為具有Json屬性的設置操作的類;將所述目標字符串轉(zhuǎn)化為所述Json對象;以及由所述Json對象生成所述目標字符串的對象。
[0009]進一步地,所述Json對象用于提供判斷所述目標字符串的鍵屬性是否存在的判斷依據(jù),在創(chuàng)建與所述目標字符串對應的Json對象之后,所述對象反序列化方法還包括:通過所述Json對象判斷所述目標字符串的鍵屬性是否存在。
[0010]進一步地,所述Json對象用于提供通過所述目標字符串的屬性名稱獲取指定類型值的依據(jù),在創(chuàng)建與所述目標字符串對應的Json對象之后,所述對象反序列化方法還包括:所述Json對象通過所述目標字符串的屬性名稱獲取指定類型值。
[0011]進一步地,創(chuàng)建與所述目標字符串對應的Json對象包括:獲取所述目標字符串對應的數(shù)組;獲取所述數(shù)組的索引;通過所述索引獲取所述數(shù)組中的值;以及通過所述數(shù)組中的值創(chuàng)建與所述目標字符串對應的Json對象。
[0012]進一步地,創(chuàng)建與所述目標字符串對應的Json對象包括:創(chuàng)建一個測試類,所述測試類為書籍類對象,所述書籍類對象包含多個屬性;由所述Json對象生成所述目標字符串的對象包括:序列化預先設置的Json字符串,將所述Json字符串反序列化為所述書籍類對象;通過所述書籍類對象生成所述目標字符串的對象;在由所述Json對象生成所述目標字符串的對象之后,所述對象反序列化方法還包括:通過所述Json對象對所述目標字符串完成反序列化操作。
[0013]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種對象反序列化裝置。根據(jù)本發(fā)明的對象反序列化裝置包括:第一獲取單元,用于獲取目標字符串;創(chuàng)建單元,用于創(chuàng)建與所述目標字符串對應的Json對象,所述Json對象為具有Json屬性的設置操作的類;轉(zhuǎn)化單元,用于將所述目標字符串轉(zhuǎn)化為所述Json對象;以及生成單元,用于由所述Json對象生成所述目標字符串的對象。
[0014]進一步地,所述Json對象用于提供判斷所述目標字符串的鍵屬性是否存在的判斷依據(jù),所述對象反序列化裝置還包括:判斷單元,用于在創(chuàng)建與所述目標字符串對應的Json對象之后,通過所述Json對象判斷所述目標字符串的鍵屬性是否存在。
[0015]進一步地,所述Json對象用于提供通過所述目標字符串的屬性名稱獲取指定類型值的依據(jù),所述對象反序列化裝置還包括:第二獲取單元,用于在創(chuàng)建與所述目標字符串對應的Json對象之后,所述Json對象通過所述目標字符串的屬性名稱獲取指定類型值。
[0016]進一步地,所述創(chuàng)建單元包括:第一獲取模塊,用于獲取所述目標字符串對應的數(shù)組;第二獲取模塊,用于獲取所述數(shù)組的索引;第三獲取模塊,用于通過所述索引獲取所述數(shù)組中的值;以及第一創(chuàng)建模塊,用于通過所述數(shù)組中的值創(chuàng)建與所述目標字符串對應的Json對象。
[0017]進一步地,所述創(chuàng)建單元包括:第二創(chuàng)建模塊,用于創(chuàng)建一個測試類,所述測試類為書籍類對象,所述書籍類對象包含多個屬性;所述生成單元包括:轉(zhuǎn)化模塊,用于序列化預先設置的Json字符串,將所述Json字符串反序列化為所述書籍類對象;生成模塊,用于通過所述書籍類對象生成所述目標字符串的對象;所述對象反序列化裝置還包括:操作單元,用于由所述Json對象生成所述目標字符串的對象之后,通過所述Json對象對所述目標字符串完成反序列化操作。
[0018]通過本發(fā)明,采用對象反序列化方法包括:獲取目標字符串;創(chuàng)建與目標字符串對應的Json對象,Json對象為具有Json屬性的設置操作的類;將目標字符串轉(zhuǎn)化為Json對象;以及由Json對象生成目標字符串的對象,通過創(chuàng)建與目標字符串對應的Json對象,并將目標字符串轉(zhuǎn)化為該Json對象,由Json對象生成目標字符串的對象,從而實現(xiàn)對目標字符串的反序列化,由于將Json字符串轉(zhuǎn)化為一個標準的Json對象,從而避免了 Json字符串內(nèi)容與目標對象不匹配,而導致的反序列化失敗的問題,達到了成功反序列化的效果。
【專利附圖】
【附圖說明】
[0019]構(gòu)成本申請的一部分的附圖用來提供對本發(fā)明的進一步理解,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當限定。在附圖中:[0020]圖1是根據(jù)本發(fā)明第一實施例的對象反序列化裝置的結(jié)構(gòu)示意圖;
[0021]圖2是根據(jù)本發(fā)明第二實施例的對象反序列化裝置的結(jié)構(gòu)示意圖;
[0022]圖3是根據(jù)本發(fā)明第一實施例的對象反序列化方法的流程圖;
[0023]圖4是根據(jù)本發(fā)明第二實施例的對象反序列化方法的流程圖;以及
[0024]圖5是根據(jù)本發(fā)明第三實施例的對象反序列化方法的流程圖。
【具體實施方式】
[0025]需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細說明本發(fā)明。
[0026]本發(fā)明實施例提供了一種對象反序列化裝置,該裝置可以通過計算機設備實現(xiàn)其功能。
[0027]圖1是根據(jù)本發(fā)明第一實施例的對象反序列化裝置的結(jié)構(gòu)示意圖。如圖1所示,該對象反序列化裝置包括第一獲取單元10、創(chuàng)建單元20、轉(zhuǎn)化單元30和生成單元40。
[0028]第一獲取單元10用于獲取目標字符串。
[0029]該目標字符串中包含有進行反序列化生成的對像的鍵屬性,例如,當對像為書籍,其具有的屬性包括書籍編號、作者、出版社和備注等,將該書籍進行序列化后,生成有與該書籍對應的Json字符串,該Json字符串具有與書籍的屬性相對應的屬性值。獲取目標字符串以便于將該目標字符串進行反序列化。
[0030]Json簡單說就是javascript中的對象和數(shù)組,所以這兩種結(jié)構(gòu)就是對象和數(shù)組兩種結(jié)構(gòu),通過這兩種結(jié)構(gòu)可以表示各種復雜的結(jié)構(gòu)。
[0031 ] 對象:對象在javascript中表示為“ ”擴起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為{key:value, key:value,...}的鍵值對的結(jié)構(gòu),在面向?qū)ο蟮恼Z言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為對象。key獲取屬性值,這個屬性值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。
[0032]數(shù)組:數(shù)組在javascript中是中括號“ □”擴起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為["java","javascript","vb",...],取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。
[0033]經(jīng)過對象、數(shù)組2種結(jié)構(gòu)就可以組合成復雜的數(shù)據(jù)結(jié)構(gòu)了。
[0034]創(chuàng)建單元20用于創(chuàng)建與目標字符串對應的Json對象,Json對象為具有Json屬性的設置操作的類。
[0035]Json對象中具有將Json字符串生成其對應的對象的方法。該Json對象可以是用于提供判斷鍵屬性是否存在的方法和通過屬性名稱獲取指定類型值的方法的類。例如,當判斷對象為書籍時,Json對象可以用于判斷其出版社這一屬性對應的鍵屬性是否存在,并獲取該屬性對應的類型值。這里的類(Class)是面向?qū)ο蟪绦蛟O計語言中的一個概念。實際上是對某種類型的對象定義變量和方法的原型。它表示對現(xiàn)實生活中一類具有共同特征的事物的抽象,是面向?qū)ο缶幊痰幕A。一個類定義了一組對象。類具有行為(be-havoir),它描述一個對象能夠做什么以及做的方法(method),它們是可以對這個對象進行操作的程序和過程。
[0036]類實際上是對某種類型的對象定義變量和方法的原型。它表示對現(xiàn)實生活中一類具有共同特征的事物的抽象,是面向?qū)ο缶幊痰幕A。類是對某個對象的定義。它包含有關(guān)對象動作方式的信息,包括它的名稱、方法、屬性和事件。實際上它本身并不是對象,因為它不存在于內(nèi)存中。當引用類的代碼運行時,類的一個新的實例,即對象,就在內(nèi)存中創(chuàng)建了。雖然只有一個類,但能從這個類在內(nèi)存中創(chuàng)建多個相同類型的對象。類通過接口與外界發(fā)生關(guān)系。
[0037]可以把類看作“理論上”的對象,也就是說,它為對象提供藍圖,但在內(nèi)存中并不存在。從這個藍圖可以創(chuàng)建任何數(shù)量的對象。從類創(chuàng)建的所有對象都有相同的成員:屬性、方法和事件。但是,每個對象都像一個獨立的實體一樣動作。例如,一個對象的屬性可以設置成與同類型的其他對象不同的值(value)。
[0038]轉(zhuǎn)化單元30用于將目標字符串轉(zhuǎn)化為Json對象。
[0039]由于Json對象具有將Json字符串生成其對應的對象的方法,Json對象封裝了Json字符串的處理過程,將目標字符串轉(zhuǎn)化為Json對象,以便于通過Json對象生成與目標字符串的對象。目標字符串的對象即為目標字符串對應的目標對象。
[0040]生成單元40用于由Json對象生成目標字符串的對象。
[0041]其中Json對象為目標字符串對應的Json對象,且Json對象封裝了 Json字符串的處理過程,因此由Json對象可以生成目標字符串的對象,從而實現(xiàn)目標字符串的反序列化。
[0042]根據(jù)本發(fā)明實施例,通過創(chuàng)建與目標字符串對應的Json對象,并將目標字符串轉(zhuǎn)化為該Json對象,由Json對象生成目標字符串的對象,從而實現(xiàn)對目標字符串的反序列化,由于將Json字符串轉(zhuǎn)化為一個標準的Json對象,從而不會因為Json字符串內(nèi)容與目標對象不匹配而導致的反序列化失敗,克服了語言框架自帶的無法反序列化Json字符串的問題。
[0043]優(yōu)選地,Json對象用于提供判斷目標字符串的鍵屬性是否存在的判斷依據(jù),對象反序列化裝置還包括判斷單元,該判斷單元用于在創(chuàng)建與目標字符串對應的Json對象之后,通過Json對象判斷目標字符串的鍵屬性是否存在。
[0044]由于將目標字符串進行反序列化時,需要獲取目標字符串的對象的所有屬性值,以對目標字符串進行反序列化生成目標字符串的對象。當創(chuàng)建與目標字符串對應的Json對象之后,需要Json對象通過判斷目標字符串鍵屬性是否存在,例如,當對象為書籍時,需要判斷書籍對應的書籍編號、作者、出版社和備注等屬性在Json字符串中的屬性值是否存在。
[0045]由于Json字符串的數(shù)據(jù)提供者與反序列化的開發(fā)者不同,當數(shù)據(jù)提供者將Json字符串的數(shù)據(jù)進行升級時,例如:增加/減少Json字符串對應的對象的屬性,或者更改其數(shù)據(jù)類型,那么反序列化的開發(fā)者使用傳統(tǒng)手動方式解析極有可能導致解析失敗,本裝置通過判斷屬性存在和類型檢測仍然可以保持反序列化的兼容性。
[0046]屬性是實體的描述性性質(zhì)或特征,具有數(shù)據(jù)類型、域、默認值三種性質(zhì)。屬性也往往用于對控件特性的描述。對于按鈕控件的名稱、顯示的文字、背景色,背景圖片等等。大多數(shù)控件都具有的屬性稱為公共屬性:名稱、標題、背景色、前景色等等。
[0047]優(yōu)選地,Json對象用于提供通過目標字符串的屬性名稱獲取指定類型值的依據(jù),對象反序列化裝置還包括第二獲取單元,該第二獲取單元用于在創(chuàng)建與目標字符串對應的Json對象之后,Json對象通過目標字符串的屬性名稱獲取指定類型值。
[0048]目標字符串的屬性名稱對應著目標字符串的對象的屬性,例如,當對象為書籍時,其具有書籍編號、作者、出版社和備注等屬性在Json字符串中包含有相應的屬性名稱“ISBN'“Author,,、“PubIisher'“Remarks”等。指定類型值即各屬性名稱相應的具有特定類型的值。通過獲取指定類型值用以生成目標字符串的對象。
[0049]圖2是根據(jù)本發(fā)明第二實施例的對象反序列化裝置的結(jié)構(gòu)示意圖。該實施例的對象反序列化裝置可以作為上述實施例的對象反序列化裝置的一種優(yōu)選實施方式。如圖3所示,該對象反序列化裝置包括第一獲取單元10、創(chuàng)建單元20、轉(zhuǎn)化單元30和生成單元40,其中,創(chuàng)建單元20包括:第一獲取模塊201、第二獲取模塊202、第三獲取模塊203和第一創(chuàng)建模塊204。第一獲取單元10、轉(zhuǎn)化單元30和生成單元40與圖1所示的第一獲取單元10、轉(zhuǎn)化單元30和生成單元40功能相同,這里不做贅述。
[0050]第一獲取模塊201用于獲取目標字符串對應的數(shù)組。
[0051]所謂數(shù)組,就是相同數(shù)據(jù)類型的元素按一定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,然后用編號區(qū)分他們的變量的集合,這個名字成為數(shù)組名,編號成為下標。組成數(shù)組的各個變量成為數(shù)組的分量,也稱為數(shù)組的元素,有時也稱為下標變量。數(shù)組是在程序設計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來的一種形式。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在目標字符串中可以存在有以數(shù)組形式存在的對象的屬性值,因此創(chuàng)建Json對象同時,創(chuàng)建一個可選的Json數(shù)組的類,可以用于通過索引獲取數(shù)組中的值。
[0052]第二獲取模塊202用于獲取數(shù)組的索引。
[0053]該索引用于索引數(shù)組中的值,以便于準確定位到數(shù)組中的值并獲取該數(shù)組中的值。
[0054]第三獲取模塊203用于通過索引獲取數(shù)組中的值。
[0055]當索引到該數(shù)組中的值后,獲取該數(shù)組的值。由于數(shù)組中的值對應有對象的屬性,便于創(chuàng)建相應的Json對象,最后完成目標字符串的反序列化。
[0056]第一創(chuàng)建模塊204用于通過數(shù)組中的值創(chuàng)建與目標字符串對應的Json對象。
[0057]由于數(shù)組中的值對應有對象的屬性,因此創(chuàng)建后的Json對象具有與目標字符串相應的屬性。創(chuàng)建的Json數(shù)組繼承Json對象,可以根據(jù)數(shù)組中的值創(chuàng)建Json數(shù)組以創(chuàng)建與目標字符串對應的Json對象。
[0058]優(yōu)選地,創(chuàng)建單元20包括第二創(chuàng)建模塊,用于創(chuàng)建一個測試類,測試類為書籍類對象,書籍類對象包含多個屬性。
[0059]創(chuàng)建一個測試類(書籍Book類),Book類包含了幾個屬性,如整數(shù)的ID為標識,書籍編號ISBN,作者Author、出版社PubI i sher、備注Remarks均為字符串,和一個時間類型的出版日期PublishDate。由于計算機開發(fā)語言不同,實現(xiàn)方式不同,我們僅以C#為例,其中,將“ Json對象”命名為JsonObject,將“ Json數(shù)組”命名為JsonArray。在該實施例中,
創(chuàng)建的測試類如下:
[0060]public class Book
{
public int ID { get; set; }
public string ISBN { get; set; }
public string Author { get; set; }
public DateTime PublishDate { get; set; }
public string Publisher { get; set; j
public string Remarks { get; set; }
}
[0061]生成單元40包括轉(zhuǎn)化模塊和生成模塊。轉(zhuǎn)化模塊用于序列化預先設置的Json字符串,將Json字符串反序列化為書籍類對象。如{〃ID〃:1,"ISBN":"000-0-0000-0000-0", "Author":"XXX", "PublishDate":"1999-9_9","Publisher":"XXX"}。
[0062]生成模塊用于通過書籍類對象生成目標字符串的對象。
[0063]通過Json對象構(gòu)建目標對象Book:
[0064]JsonObject jo = Json0bject.Parse (" {\"ID\〃: I, \"ISBN\":\"000-0-0000-0000-0\","Author\〃:\"XXX\", \" PublishDate'〃:\"1999-9-9\", \〃Publisher\〃:\"XXX\"}");
[0065]Book book=new Book ();
[0066]book.1D=j0.GetInt ("ID");
[0067]book.1SBN=j0.GetString ("ISBN");
[0068]book.Author=j0.GetString ("Author");
[0069]book.PubIishDate=j0.GetDate("PublishDate");
[0070]book.Publisher=j0.GetString("Publisher");
[0071]if(j0.Has("Remarks")) book.Remarks=j0.GetString("Remarks");
[0072]對于復雜對象的序列化,數(shù)組、Json對象在JsonObject可以通過GetArray和GetObject 來獲取。
[0073]對象反序列化裝置還包括操作單元,該操作單元用于由Json對象生成目標字符串的對象之后,通過Json對象對目標字符串完成反序列化操作。
[0074]根據(jù)本發(fā)明實施例,Json對象封裝了 Json字符串的處理過程,開發(fā)者不必了解Json格式,也無需處理復雜的字符串解析,開發(fā)者僅需要了解面向?qū)ο蟮母拍罴纯赏瓿煞葱蛄谢?,大大降低了開發(fā)的復雜度,降低出錯概率,節(jié)省了開發(fā)者時間。其中,封裝是指隱藏對象的屬性和實現(xiàn)細節(jié),僅對外公開接口,控制在程序中屬性的讀取和修改的訪問級別。封裝就是將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成一個有機的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進行有機的結(jié)合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現(xiàn)細節(jié),而只是要通過外部接口,以特定的訪問權(quán)限來使用類的成員。
[0075]本發(fā)明實施例還提供了 一種對象反序列化方法。該方法運行在計算機設備上。需要說明的是,本發(fā)明實施例的對象反序列化方法可以通過本發(fā)明實施例所提供的對象反序列化裝置來執(zhí)行,本發(fā)明實施例的對象反序列化裝置也可以用于執(zhí)行本發(fā)明實施例所提供的對象反序列化方法。
[0076]圖3是根據(jù)本發(fā)明第一實施例的對象反序列化方法的流程圖。如圖3所示,該對象反序列化方法包括步驟如下:
[0077]步驟SIOI,獲取目標字符串。該目標字符串為Json字符串,可以是任意的需要進行反序列化的Json字符串。該目標字符串中包含有進行反序列化生成的對像的鍵屬性,例如,當對像為書籍,其具有的屬性包括書籍編號、作者、出版社和備注等,將該書籍進行序列化后,生成有與該書籍對應的Json字符串,該Json字符串具有與書籍的屬性相對應的屬性值。獲取目標字符串以便于將該目標字符串進行反序列化。
[0078]Json簡單說就是javascript中的對象和數(shù)組,所以這兩種結(jié)構(gòu)就是對象和數(shù)組兩種結(jié)構(gòu),通過這兩種結(jié)構(gòu)可以表示各種復雜的結(jié)構(gòu)。
[0079]對象:對象在javascript中表示為“ ”擴起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為{key:value, key:value,...}的鍵值對的結(jié)構(gòu),在面向?qū)ο蟮恼Z言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為對象。key獲取屬性值,這個屬性值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。
[0080]數(shù)組:數(shù)組在javascript中是中括號“ □”擴起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為["java","javascript","vb",...],取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。
[0081]經(jīng)過對象、數(shù)組2種結(jié)構(gòu)就可以組合成復雜的數(shù)據(jù)結(jié)構(gòu)了。
[0082]步驟S102,創(chuàng)建與目標字符串對應的Json對象,Json對象為具有Json屬性的設置操作的類。Json對象中具有將Json字符串生成其對應的對象的方法。該Json對象可以是用于提供判斷鍵屬性是否存在的方法和通過屬性名稱獲取指定類型值的方法的類。例如,當判斷對象為書籍時,Json對象可以用于判斷其出版社這一屬性對應的鍵屬性是否存在,并獲取該屬性對應的類型值。這里的類(Class)是面向?qū)ο蟪绦蛟O計語言中的一個概念。實際上是對某種類型的對象定義變量和方法的原型。它表示對現(xiàn)實生活中一類具有共同特征的事物的抽象,是面向?qū)ο缶幊痰幕A。一個類定義了一組對象。類具有行為(be-havoir),它描述一個對象能夠做什么以及做的方法(method),它們是可以對這個對象進行操作的程序和過程。
[0083]類實際上是對某種類型的對象定義變量和方法的原型。它表示對現(xiàn)實生活中一類具有共同特征的事物的抽象,是面向?qū)ο缶幊痰幕A。類是對某個對象的定義。它包含有關(guān)對象動作方式的信息,包括它的名稱、方法、屬性和事件。實際上它本身并不是對象,因為它不存在于內(nèi)存中。當引用類的代碼運行時,類的一個新的實例,即對象,就在內(nèi)存中創(chuàng)建了。雖然只有一個類,但能從這個類在內(nèi)存中創(chuàng)建多個相同類型的對象。類通過接口與外界發(fā)生關(guān)系。
[0084]可以把類看作“理論上”的對象,也就是說,它為對象提供藍圖,但在內(nèi)存中并不存在。從這個藍圖可以創(chuàng)建任何數(shù)量的對象。從類創(chuàng)建的所有對象都有相同的成員:屬性、方法和事件。但是,每個對象都像一個獨立的實體一樣動作。例如,一個對象的屬性可以設置成與同類型的其他對象不同的值(value)。
[0085]步驟S103,將目標字符串轉(zhuǎn)化為Json對象。由于Json對象具有將Json字符串生成其對應的對象的方法,Json對象封裝了 Json字符串的處理過程,將目標字符串轉(zhuǎn)化為Json對象,以便于通過Json對象生成與目標字符串的對象。目標字符串的對象即為目標字符串對應的目標對象。
[0086]步驟S104,由Json對象生成目標字符串的對象。其中Json對象為目標字符串對應的Json對象,且Json對象封裝了 Json字符串的處理過程,因此由Json對象可以生成目標字符串的對象,從而實現(xiàn)目標字符串的反序列化。
[0087]根據(jù)本發(fā)明實施例,通過創(chuàng)建與目標字符串對應的Json對象,并將目標字符串轉(zhuǎn)化為該Json對象,由Json對象生成目標字符串的對象,從而實現(xiàn)對目標字符串的反序列化,由于將Json字符串轉(zhuǎn)化為一個標準的Json對象,從而不會因為Json字符串內(nèi)容與目標對象不匹配而導致的反序列化失敗,克服了語言框架自帶的無法反序列化Json字符串的問題。
[0088]優(yōu)選地,Json對象用于提供判斷目標字符串的鍵屬性是否存在的判斷依據(jù),在步驟102之后,對象反序列化方法還包括:
[0089]步驟5,通過Json對象判斷目標字符串的鍵屬性是否存在。由于將目標字符串進行反序列化時,需要獲取目標字符串的對象的所有屬性值,以對目標字符串進行反序列化生成目標字符串的對象。當創(chuàng)建與目標字符串對應的Json對象之后,需要Json對象通過判斷目標字符串鍵屬性是否存在,例如,當對象為書籍時,需要判斷書籍對應的書籍編號、作者、出版社和備注等屬性在Json字符串中的屬性值是否存在。
[0090]由于Json字符串的數(shù)據(jù)提供者與反序列化的開發(fā)者不同,當數(shù)據(jù)提供者將Json字符串的數(shù)據(jù)進行升級時,例如:增加/減少Json字符串對應的對象的屬性,或者更改其數(shù)據(jù)類型,那么反序列化的開發(fā)者使用傳統(tǒng)手動方式解析極有可能導致解析失敗,本裝置通過判斷屬性存在和類型檢測仍然可以保持反序列化的兼容性。
[0091]屬性是實體的描述性性質(zhì)或特征,具有數(shù)據(jù)類型、域、默認值三種性質(zhì)。屬性也往往用于對控件特性的描述。對于按鈕控件的名稱、顯示的文字、背景色,背景圖片等等。大多數(shù)控件都具有的屬性稱為公共屬性:名稱、標題、背景色、前景色等等。
[0092]優(yōu)選地,Json對象用于提供通過目標字符串的屬性名稱獲取指定類型值的依據(jù),在步驟102之后,對象反序列化方法還包括:
[0093]步驟S6,Json對象通過目標字符串的屬性名稱獲取指定類型值。目標字符串的屬性名稱對應著目標字符串的對象的屬性,例如,當對象為書籍時,其具有書籍編號、作者、出版社和備注等屬性在Json字符串中包含有相應的屬性名稱“ISBN”、“Author”、“Pub Ii sher'“Remarks”等。指定類型值即各屬性名稱相應的具有特定類型的值。通過獲取指定類型值用以生成目標字符串的對象。
[0094]圖4是根據(jù)本發(fā)明第二實施例的對象反序列化方法的流程圖。該實施例的對象反序列化方法可以作為上述實施例的對象反序列化方法一種優(yōu)選實施方式。如圖4所示,該對象反序列化方法包括步驟如下:
[0095]步驟S201,獲取目標字符串。該目標字符串為Json字符串,可以是任意的需要進行反序列化的Json字符串。該目標字符串中包含有進行反序列化生成的對像的鍵屬性,例如,當對像為書籍,其具有的屬性包括書籍編號、作者、出版社和備注等,將該書籍進行序列化后,生成有與該書籍對應的Json字符串,該Json字符串具有與書籍的屬性相對應的屬性值。獲取目標字符串以便于將該目標字符串進行反序列化。
[0096]步驟S202,獲取目標字符串對應的數(shù)組。所謂數(shù)組,就是相同數(shù)據(jù)類型的元素按一定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,然后用編號區(qū)分他們的變量的集合,這個名字成為數(shù)組名,編號成為下標。組成數(shù)組的各個變量成為數(shù)組的分量,也稱為數(shù)組的元素,有時也稱為下標變量。數(shù)組是在程序設計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來的一種形式。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在目標字符串中可以存在有以數(shù)組形式存在的對象的屬性值,因此創(chuàng)建Json對象同時,創(chuàng)建一個可選的Json數(shù)組的類,可以用于通過索引獲取數(shù)組中的值。
[0097]步驟S203,獲取數(shù)組的索引。該索引用于索引數(shù)組中的值,以便于準確定位到數(shù)組中的值并獲取該數(shù)組中的值。
[0098]步驟S204,通過索引獲取數(shù)組中的值。當索引到該數(shù)組中的值后,獲取該數(shù)組的值。由于數(shù)組中的值對應有對象的屬性,便于創(chuàng)建相應的Json對象,最后完成目標字符串的反序列化。
[0099]步驟S205,通過數(shù)組中的值創(chuàng)建與目標字符串對應的Json對象。由于數(shù)組中的值對應有對象的屬性,因此創(chuàng)建后的Json對象具有與目標字符串相應的屬性。創(chuàng)建的Json數(shù)組繼承Json對象,可以根據(jù)數(shù)組中的值創(chuàng)建Json數(shù)組以創(chuàng)建與目標字符串對應的Json對象。
[0100]步驟S206,將目標字符串轉(zhuǎn)化為Json對象。由于Json對象具有將Json字符串生成其對應的對象的方法,Json對象封裝了 Json字符串的處理過程,將目標字符串轉(zhuǎn)化為Json對象,以便于通過Json對象生成與目標字符串的對象。目標字符串的對象即為目標字符串對應的目標對象。
[0101]步驟S207,由Json對象生成目標字符串的對象。其中Json對象為目標字符串對應的Json對象,且Json對象封裝了 Json字符串的處理過程,因此由Json對象可以生成目標字符串的對象,從而實現(xiàn)目標字符串的反序列化。
[0102]根據(jù)本發(fā)明實施例,通過創(chuàng)建一個Json數(shù)組,以方便對目標字符串中的數(shù)組進行反序列化的。
[0103]圖5是根據(jù)本發(fā)明第三實施例的對象反序列化方法的流程圖。該實施例的對象反序列化方法可以作為上述實施例的一種優(yōu)選實施方式。如圖5所示,該對象反序列化方法包括步驟如下:
[0104]步驟S301,獲取目標字符串。該目標字符串為Json字符串,可以是任意的需要進行反序列化的Json字符串。該目標字符串中包含有進行反序列化生成的對像的鍵屬性,例如,當對像為書籍,其具有的屬性包括書籍編號、作者、出版社和備注等,將該書籍進行序列化后,生成有與該書籍對應的Json字符串,該Json字符串具有與書籍的屬性相對應的屬性值。獲取目標字符串以便于將該目標字符串進行反序列化。
[0105]步驟S302,創(chuàng)建一個測試類,測試類為書籍類對象,書籍類對象包含多個屬性。創(chuàng)建一個測試類(書籍Book類),Book類包含了幾個屬性,如整數(shù)的ID為標識,書籍編號ISBN,作者Author、出版社Publisher、備注Remarks均為字符串,和一個時間類型的出版日期PubI iShDate。由于計算機開發(fā)語言不同,實現(xiàn)方式不同,我們僅以C#為例,其中,將“ Json對象”命名為JsonObject,將“Json數(shù)組”命名為JsonArray。在該實施例中,倉ll建的測試
類如下:
[0106]
【權(quán)利要求】
1.一種對象反序列化方法,其特征在于,包括: 獲取目標字符串; 創(chuàng)建與所述目標字符串對應的Json對象,所述Json對象為具有Json屬性的設置操作的類; 將所述目標字符串轉(zhuǎn)化為所述Json對象;以及 由所述Json對象生成所述目標字符串的對象。
2.根據(jù)權(quán)利要求1所述的對象反序列化方法,其特征在于,所述Json對象用于提供判斷所述目標字符串的鍵屬性是否存在的判斷依據(jù),在創(chuàng)建與所述目標字符串對應的Json對象之后,所述對象反序列化方法還包括: 通過所述Json對象判斷所述目標字符串的鍵屬性是否存在。
3.根據(jù)權(quán)利要求1所述的對象反序列化方法,其特征在于,所述Json對象用于提供通過所述目標字符串的屬性名稱獲取指定類型值的依據(jù),在創(chuàng)建與所述目標字符串對應的Json對象之后,所述對象反序列化方法還包括: 所述Json對象通過所述目標字符串的屬性名稱獲取指定類型值。
4.根據(jù)權(quán)利要求1所述的對象反序列化方法,其特征在于,創(chuàng)建與所述目標字符串對應的Json對象包括: 獲取所述目標字符串對應的數(shù)組;` 獲取所述數(shù)組的索引; 通過所述索引獲取所述數(shù)組中的值;以及 通過所述數(shù)組中的值創(chuàng)建與所述目標字符串對應的Json對象。
5.根據(jù)權(quán)利要求1所述的對象反序列化方法,其特征在于, 創(chuàng)建與所述目標字符串對應的Json對象包括:創(chuàng)建一個測試類,所述測試類為書籍類對象,所述書籍類對象包含多個屬性; 由所述Json對象生成所述目標字符串的對象包括:序列化預先設置的Json字符串,將所述Json字符串反序列化為所述書籍類對象;通過所述書籍類對象生成所述目標字符串的對象, 在由所述Json對象生成所述目標字符串的對象之后,所述對象反序列化方法還包括:通過所述Json對象對所述目標字符串完成反序列化操作。
6.一種對象反序列化裝置,其特征在于,包括: 第一獲取單元,用于獲取目標字符串; 創(chuàng)建單元,用于創(chuàng)建與所述目標字符串對應的Json對象,所述Json對象為具有Json屬性的設置操作的類; 轉(zhuǎn)化單元,用于將所述目標字符串轉(zhuǎn)化為所述Json對象;以及 生成單元,用于由所述Json對象生成所述目標字符串的對象。
7.根據(jù)權(quán)利要求6所述的對象反序列化裝置,其特征在于,所述Json對象用于提供判斷所述目標字符串的鍵屬性是否存在的判斷依據(jù),所述對象反序列化裝置還包括: 判斷單元,用于在創(chuàng)建與所述目標字符串對應的Json對象之后,通過所述Json對象判斷所述目標字符串的鍵屬性是否存在。
8.根據(jù)權(quán)利要求6所述的對象反序列化裝置,其特征在于,所述Json對象用于提供通過所述目標字符串的屬性名稱獲取指定類型值的依據(jù),所述對象反序列化裝置還包括:第二獲取單元,用于在創(chuàng)建與所述目標字符串對應的Json對象之后,所述Json對象通過所述目標字符串的屬性名稱獲取指定類型值。
9.根據(jù)權(quán)利要求6所述的對象反序列化裝置,其特征在于,所述創(chuàng)建單元包括: 第一獲取模塊,用于獲取所述目標字符串對應的數(shù)組; 第二獲取模塊,用于獲取所述數(shù)組的索引; 第三獲取模塊,用于通過所述索引獲取所述數(shù)組中的值;以及 第一創(chuàng)建模塊,用于通過所述數(shù)組中的值創(chuàng)建與所述目標字符串對應的Json對象。
10.根據(jù)權(quán)利要求6所述的對象反序列化裝置,其特征在于, 所述創(chuàng)建單元包括:第二創(chuàng)建模塊,用于創(chuàng)建一個測試類,所述測試類為書籍類對象,所述書籍類對象包含多個屬性; 所述生成單元包括:轉(zhuǎn)化模塊,用于序列化預先設置的Json字符串,將所述Json字符串反序列化為所述書籍類對象;生成模塊,用于通過所述書籍類對象生成所述目標字符串的對象, 所述對象反序列化裝置還包括:操作單元,用于由所述Json對象生成所述目標字符串的對象之后,通過所述Js on對象對所述目標字符串完成反序列化操作。
【文檔編號】G06F9/44GK103605518SQ201310585755
【公開日】2014年2月26日 申請日期:2013年11月19日 優(yōu)先權(quán)日:2013年11月19日
【發(fā)明者】池雷 申請人:北京國雙科技有限公司