本申請涉及計算機技術領域,尤其是涉及一種反序列化方法及裝置。
背景技術:
序列化和反序列化是計算機領域常用的技術。序列化用于將對象的屬性值轉(zhuǎn)換為序列化數(shù)據(jù),從而能夠?qū)π蛄谢瘮?shù)據(jù)進行保存或者傳輸?shù)炔僮?。反序列化為序列化的逆過程,用于對序列化數(shù)據(jù)解析獲得對象的屬性值,根據(jù)屬性值對待重建對象的屬性進行賦值。
舉例說明,user是一個表示用戶的類,user是一個user類的對象,user具有屬性:userid,屬性userid的屬性值為0001。將user的屬性值保存為序列化數(shù)據(jù),例如xml格式或者json格式的數(shù)據(jù)的過程即為一種序列化,而從xml格式或者json格式的數(shù)據(jù)中解析出user的屬性值,根據(jù)user的屬性值對user的屬性進行賦值的過程即為一種反序列化。
目前在實現(xiàn)反序列化時,首先要通過反射的方式獲得待重建對象具有的屬性,之后通過解析序列化數(shù)據(jù)獲得屬性對應的屬性值,并根據(jù)獲得的屬性值對屬性賦值。然而,目前在通過反射的方式獲得所述待重建對象具有的屬性時,通常會占用較多的硬件資源,從而造成反序列化的效率較低。
技術實現(xiàn)要素:
本申請解決的技術問題在于提供一種反序列化方法及裝置,無需通過反射的方式獲得待重建對象具有的屬性,從而節(jié)約了硬件資源以提高反序列化的效率。
為此,本申請解決技術問題的技術方案是:
本申請?zhí)峁┝艘环N反序列化方法,包括:
獲取序列化數(shù)據(jù),所述序列化數(shù)據(jù)包括待重建對象的第一屬性;
對所述序列化數(shù)據(jù)進行解析以生成第一鍵值對,所述第一鍵值對包括第一鍵信息和第一值信息,所述第一鍵信息與所述第一值信息具有對應關系;
根據(jù)預先設置的所述第一鍵信息和所述第一屬性的對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息。
可選的,所述序列化數(shù)據(jù)還包括所述待重建對象的第二屬性;所述方法還包括:
對所述序列化數(shù)據(jù)進行解析以生成第二鍵值對,所述第二鍵值對包括第二鍵信息和第二值信息,所述第二鍵信息與所述第二值信息具有對應關系;
根據(jù)預先設置的所述第二鍵信息和所述第二屬性的對應關系,將所述第二屬性賦值為所述第二鍵信息對應的所述第二值信息。
可選的,所述第一屬性具有子屬性;
所述方法還包括:建立所述待重建對象的第一子對象;
所述根據(jù)預先設置的所述第一鍵信息和所述第一屬性的對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,包括:
根據(jù)預先設置的所述第一鍵信息和所述子屬性的對應關系,將所述第一子對象的屬性賦值為所述第一鍵信息對應的所述第一值信息。
可選的,所述第一屬性為集合格式;
所述方法還包括:建立所述待重建對象的第二子對象,所述第二子對象為集合類型;
將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,包括:
通過循環(huán)方式將所述第二子對象的屬性賦值為所述第一鍵信息對應的所述第一值信息,以得到所述第二子對象的屬性值;
將所述第一屬性賦值為所述第二子對象的屬性值。
可選的,所述獲取序列化數(shù)據(jù),包括:
調(diào)用與所述待重建對象對應的api;
獲取調(diào)用所述api的返回數(shù)據(jù),將所述返回數(shù)據(jù)作為所述序列化數(shù)據(jù)。
本申請還提供了一種反序列化裝置,包括:
獲取單元,用于獲取序列化數(shù)據(jù),所述序列化數(shù)據(jù)包括待重建對象的第一屬性;
生成單元,用于對所述序列化數(shù)據(jù)進行解析以生成第一鍵值對,所述第一鍵值對包括第一鍵信息和第一值信息,所述第一鍵信息與所述第一值信息具有對應關系;
賦值單元,用于根據(jù)預先設置的所述第一鍵信息和所述第一屬性的對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息。
可選的,所述序列化數(shù)據(jù)還包括所述待重建對象的第二屬性;
所述生成單元還用于,對所述序列化數(shù)據(jù)進行解析以生成第二鍵值對,所述第二鍵值對包括第二鍵信息和第二值信息,所述第二鍵信息與所述第二值信息具有對應關系;
所述賦值單元還用于,根據(jù)預先設置的所述第二鍵信息和所述第二屬性的對應關系,將所述第二屬性賦值為所述第二鍵信息對應的所述第二值信息。
可選的,所述第一屬性具有子屬性;
所述裝置還包括:第一建立單元,所述第一建立單元用于建立所述待重建對象的第一子對象;
所述賦值單元具體用于:
根據(jù)預先設置的所述第一鍵信息和所述子屬性的對應關系,將所述第一子對象的屬性賦值為所述第一鍵信息對應的所述第一值信息。
可選的,所述第一屬性為集合格式;
所述裝置還包括:第二建立單元,所述第二建立單元用于建立所述待重建對象的第二子對象,所述第二子對象為集合類型;
當將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,所述賦值單元具體用于:
通過循環(huán)方式將所述第二子對象的屬性賦值為所述第一鍵信息對應的所述第一值信息,以得到所述第二子對象的屬性值;
將所述第一屬性賦值為所述第二子對象的屬性值。
可選的,所述獲取單元具體用于:
調(diào)用與所述待重建對象對應的api;
獲取調(diào)用所述api的返回數(shù)據(jù),將所述返回數(shù)據(jù)作為所述序列化數(shù)據(jù)。
通過上述技術方案可知,本申請實施例在獲取序列化數(shù)據(jù)后,對所述序列化數(shù)據(jù)進行解析生成第一鍵值對,其中,所述序列化數(shù)據(jù)包括待重建對象的第一屬性,所述第一鍵值對包括具有對應關系的第一鍵信息和第一值信息。其中,由于所述待重建對象具有所述第一屬性是所述待重建對象的固有特征,因此本申請實施例中無需通過反射的方式獲得待重建對象具有的屬性,而是預先設置出所述第一屬性和所述第一鍵信息具有對應關系,從而可以根據(jù)該對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,實現(xiàn)了對所述待重建對象的所述第一屬性的反序列化??梢?,由于本申請實施例中無需通過反射的方式獲得待重建對象具有的屬性,因此不需要占用過多的硬件資源,從而提高了反序列化的效率。
附圖說明
為了更清楚地說明本申請實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域普通技術人員來講,還可以根據(jù)這些附圖獲得其它的附圖。
圖1為本申請實施例提供的一種方法實施例的流程示意圖;
圖2為本申請實施例提供的另一種方法實施例的流程示意圖;
圖3為本申請實施例提供的一種裝置實施例的結(jié)構(gòu)示意圖。
具體實施方式
下面通過一個例子對目前反序列化的方式進行說明。
user是一個表示用戶的類,user是一個user類的對象,即user類的一個實例,user具有屬性:userid,屬性userid的屬性值為0001,通過序列化將user的屬性值0001轉(zhuǎn)換為序列化數(shù)據(jù),例如json格式的數(shù)據(jù):{“userid”:“0001”}
反序列化的過程是:首先通過反射的方式獲得user具有的屬性:userid,之后通過解析序列化數(shù)據(jù)獲得屬性對應的屬性值,例如,將通過 反射獲得的屬性userid與序列化數(shù)據(jù)進行匹配,從而獲得屬性userid對應的屬性值為0001,再根據(jù)獲得的屬性值0001對屬性userid賦值,即實現(xiàn)對屬性userid的反序列化。當對user的所有屬性均進行賦值后,即實現(xiàn)重建對象user。
然而,在通過反射方式獲得user具有的屬性時,通常會占用較多的硬件資源,從而造成反序列化的效率較低。
此外,這種方式還具有以下問題:由于一些編程語言并不支持通過反射方式獲得待重建對象具有的屬性,從而可能導致無法實現(xiàn)反序列化;由于序列化數(shù)據(jù)可能存在多種格式,例如xml格式或者json格式,因此針對于不同的格式需要編寫不同的程序代碼對待重建對象的屬性進行賦值。
本申請實施例提供一種反序列化方法及裝置,無需通過反射的方式獲得待重建對象具有的屬性,從而節(jié)約了硬件資源以提高反序列化的效率。
為了使本技術領域的人員更好地理解本申請中的技術方案,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本申請保護的范圍。
請參閱圖1,本申請實施例提供了反序列化方法的一種方法實施例,本實施例包括:
101:獲取序列化數(shù)據(jù),所述序列化數(shù)據(jù)包括待重建對象的第一屬性。
本申請實施例中,所述序列化數(shù)據(jù)可以為xml格式或者json格式的數(shù)據(jù)。例如,所述序列化數(shù)據(jù)可以為json格式的數(shù)據(jù):
{“userid”:“0001”}
其中,userid為所述第一屬性。
所述序列化數(shù)據(jù)還包括第一屬性值,所述第一屬性與所述第一屬性值具有對應關系。
102:對所述序列化數(shù)據(jù)進行解析以生成第一鍵值對。
在本申請實施例中,可以對所述序列化數(shù)據(jù)進行解析生成所述第一鍵值對,所述第一鍵值對包括第一鍵信息(key)和第一值信息(value),所述 第一鍵信息和所述第一值信息具有對應關系。其中,所述第一鍵信息用于表示所述第一屬性,所述第一值信息用于表示所述第一屬性值。
舉例說明,若所述序列化數(shù)據(jù)為json格式的數(shù)據(jù):
{“userid”:“0001”}
生成的所述第一鍵值對可以為:
{user.userid=0001}
其中,user.userid為所述第一鍵信息,0001為所述第一值信息。
103:根據(jù)預先設置的所述第一鍵信息和所述第一屬性的對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息。
在本申請實施例中,由于所述待重建對象具有所述第一屬性是所述待重建對象的固有特征,因此本申請無需通過反射的方式獲得所述待重建對象具有的屬性,而是可以預先設置出所述待重建對象具有的所述第一屬性與所述第一鍵信息具有對應關系,并根據(jù)該對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息。其中,所述第一鍵信息可以看作是所述第一屬性的屬性值的路徑,本申請實際上利用該路徑,查找到所述第一屬性的屬性值,即所述第一值信息,從而利用所述第一值信息對所述第一屬性進行賦值。
舉例說明,若所述第一鍵信息為:user.userid=0001,預先設置所述第一屬性userid和所述第一鍵信息user.userid具有對應關系,因此可以將userid賦值為user.userid對應的0001,即令userid=0001。
通過上述技術方案可知,本申請實施例在獲取序列化數(shù)據(jù)后,對所述序列化數(shù)據(jù)進行解析生成第一鍵值對,其中,所述序列化數(shù)據(jù)包括待重建對象的第一屬性,所述第一鍵值對包括具有對應關系的第一鍵信息和第一值信息。其中,由于所述待重建對象具有所述第一屬性是所述待重建對象的固有特征,因此本申請實施例中無需通過反射的方式獲得待重建對象具有的屬性,而是預先設置出所述第一屬性和所述第一鍵信息具有對應關系,從而可以根據(jù)該對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,實現(xiàn)了對所述待重建對象的所述第一屬性的反序列化??梢?,由于本申請實施例中無需通過反射的方式獲得待重建對象具有的屬性,因此不需要占用過 多的硬件資源,從而提高了反序列化的效率。
此外,由于本申請無需通過反射的方式獲得待重建對象具有的屬性,因此不再存在編程語言不支持的問題,使得本申請的方法實施例適用于多種不同的編程語言,例如java以及c#等。而且本申請首先根據(jù)反序列化數(shù)據(jù)生成所述第一鍵值對,再根據(jù)所述第一鍵值對對所述第一屬性進行賦值,即使所述序列化數(shù)據(jù)存在不同的格式,例如無論是xml格式還是json格式,也只需同一種程序即可實現(xiàn)對所述第一屬性的賦值。
在本申請實施例中,還可以通過調(diào)用應用程序編程接口(英文:applicationprogramminginterface,簡稱:api)的方式獲得所述反序列化數(shù)據(jù)。具體地,本實施例中的101包括:調(diào)用與所述待重建對象對應的api;獲取調(diào)用所述api的返回數(shù)據(jù),將所述返回數(shù)據(jù)作為所述序列化數(shù)據(jù)。
在上述實施例中,只介紹了對所述第一屬性的反序列化過程,若所述待重建對象還包括除所述第一屬性之外的其他屬性,可以按照類似方式對其他屬性進行反序列化。例如,所述待重建對象可以具有至少兩個屬性,則102中可以對所述序列化數(shù)據(jù)進行解析生成鍵值對列表,所述鍵值對列表中包括至少兩個鍵值對,每個鍵值對中的鍵信息和值信息具有對應關系,103中通過鍵值對列表中的鍵信息查找相應的值信息,并賦值給所述待重建對象的相應的屬性。下面的實施例以所述待重建對象包括兩個屬性為例進行說明。
請參閱圖2,本申請實施例提供了反序列化方法的另一種方法實施例,本實施例包括:
201:獲取序列化數(shù)據(jù),所述序列化數(shù)據(jù)包括待重建對象的第一屬性和第二屬性。
例如,所述序列化數(shù)據(jù)可以為json格式的數(shù)據(jù):
{“userid”:“0001”,
“useraddress”:“address01”}
其中,所述第一屬性為屬性“userid”,所述第二屬性為“useraddress”。
所述序列化數(shù)據(jù)還包括第一屬性值和第二屬性值,所述第一屬性與所述第一屬性值具有對應關系,所述第二屬性與所述第二屬性值具有對應關系。
202:對所述序列化數(shù)據(jù)進行解析以生成鍵值對列表,所述鍵值對列表包括第一鍵值對和第二鍵值對。
所述第一鍵值對包括第一鍵信息和第一值信息,第一鍵信息和第一值信息具有對應關系。所述第二鍵值對包括第二鍵信息和第二值信息,所述第二鍵信息與所述第二值信息具有對應關系。其中,所述第一鍵信息用于表示所述第一屬性,所述第一值信息用于表示所述第一屬性值。所述第二鍵信息用于表示所述第二屬性,所述第二值信息用于表示所述第二屬性值。
舉例說明,若所述序列化數(shù)據(jù)為json格式的數(shù)據(jù):
{“userid”:“0001”,“useraddress”:“address01”}
生成的所述鍵值對列表可以為:
{user.userid=0001,user.useraddress=address01}
其中,user.userid為所述第一鍵信息,0001為所述第一值信息,user.useraddress為所述第二鍵信息,address01為所述第二值信息。
在java語言中,所述鍵值對列表可以存儲到map對象里。
203:根據(jù)預先設置的所述第一鍵信息和所述第一屬性的對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,并且根據(jù)預先設置的所述第二鍵信息和所述第二屬性的對應關系,將所述第二屬性賦值為所述第二鍵信息對應的所述第二值信息。
舉例說明,若所述第一鍵信息為user.userid,所述第二鍵信息為user.useraddress,預先設置所述第一屬性“userid”和所述第一鍵信息“user.userid”具有對應關系,并且預先設置所述第二屬性“useraddress”和所述第二鍵信息“user.useraddress”具有對應關系,因此可以將“userid”賦值為“user.userid”對應的0001,即令userid=0001,并且可以將“useraddress”賦值為“user.useraddress”對應的address01,即令useraddress=address01。
還需說明的是,本申請中先根據(jù)所述反序列化數(shù)據(jù)生成所述第一鍵值對,再根據(jù)所述第一鍵值對對所述第一屬性進行賦值,而不是直接根據(jù)所述反序列化數(shù)據(jù)進行賦值,還具有減少對所述反序列化數(shù)據(jù)的解析次數(shù)的技術效果。舉例說明,若所述序列化數(shù)據(jù)為json格式的數(shù)據(jù):
{“userid”:“0001”,
“useraddress”:“address01”}
待重建對象具有兩個屬性:userid和useraddress,若不生成所述第一鍵值對而直接對這兩個屬性進行賦值,則至少對所述反序列化數(shù)據(jù)解析兩次,第一次解析為:將屬性userid與所述反序列化數(shù)據(jù)進行匹配,從而獲得屬性userid對應的屬性值為0001,第二次解析為:將屬性useraddress與所述反序列化數(shù)據(jù)進行匹配,從而獲得屬性useraddress對應的屬性值為address01。而如果采用本申請?zhí)峁┑姆葱蛄谢椒?,無論所述待重建對象具有多少個屬性,只需對所述反序列化數(shù)據(jù)解析一次以生成鍵值對列表,之后根據(jù)所述鍵值對列表中的各個鍵值對對所述待重建對象的屬性進行賦值??梢姳旧暾垷o需對所述待序列化數(shù)據(jù)進行多次解析,從而減少了工作量。
在本申請實施例中,所述第一屬性可以為簡單類型,也可以為復雜類型,下面分別說明。
簡單類型指的是所述第一屬性不具有子屬性,即所述第一屬性為所述待重建對象的直接屬性。例如所述反序列化數(shù)據(jù)為json格式的數(shù)據(jù):
{“userid”:“0001”}
其中,userid為對象user的直接屬性,因此userid屬于簡單類型。
對于簡單類型,103中直接將所述第一屬性賦值為所述第一值信息即可。
例如,生成的所述第一鍵值對可以為:
{user.userid=0001}
其中,user.userid為所述第一鍵信息,0001為所述第一值信息。
可以通過以下java代碼對所述第一屬性進行賦值:
user.setuserid(map.get("user.userid"));
上述代碼表示出預先設置了第一鍵信息user.userid和所述第一屬性userid的對應關系。map對象中存儲有所述第一鍵值對。
并且在上述代碼中,表示userid和user.userid均為字符串類型,因此無需作類型轉(zhuǎn)換。如果user.userid為字符串類型,userid為其他類型,例 如int類型,則需要進行數(shù)據(jù)轉(zhuǎn)換,具體可以通過以下java代碼對所述第一屬性進行賦值:
user.setuserid(integer.valueof(map.get("user.userid")));
復雜類型指的是所述第一屬性具有子屬性。例如所述反序列化數(shù)據(jù)為json格式的數(shù)據(jù):
{"vpcattributes":{"natipaddress":"address02"},
其中,vpcattributes為所述第一屬性,natipaddress為所述第一屬性vpcattributes的子屬性。
在本申請實施例中,若所述第一屬性為復雜類型,則本申請實施例還可以包括:建立所述待重建對象的第一子對象;其中所述第一子對象實際上為所述第一屬性。103中的所述根據(jù)預先設置的所述第一鍵信息和所述第一屬性的對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,包括:根據(jù)預先設置的所述第一鍵信息和所述子屬性的對應關系,將所述第一子對象的屬性賦值為所述第一鍵信息對應的所述第一值信息。下面舉例說明。
仍以上述json格式的數(shù)據(jù)為例,生成的所述第一鍵值對可以為:
{user.vpcattributes.natipaddress=address02}
其中,user.vpcattributes.natipaddress為所述第一鍵信息,address02為所述第一值信息。其中所述第一鍵信息對應所述第一屬性和所述第一屬性的子屬性。
可以通過以下java代碼建立子對象vpcattributes:
vpcattributesvpcattributes=newvpcattributes();
可以通過以下java代碼對子對象vpcattributes的屬性進行賦值:
vpcattributes.setnatipaddress(map.get("user.vpcattributes.natipaddress"));上述代碼表示出預先設置了第一鍵信息user.vpcattributes.natipaddress和子屬性natipaddress的對應關系。
在本申請實施例中,所述第一屬性還可以為集合格式,此時可以通過循環(huán)方式對所述第一屬性進行賦值。具體地,所述方法還包括:建立所述待重 建對象的第二子對象,所述第二子對象為集合類型;103中的將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,包括:通過循環(huán)方式將所述第二子對象的屬性賦值為所述第一鍵信息對應的所述第一值信息,以獲得所述第二子對象的屬性值;將所述第一屬性賦值為第二子對象的屬性值。其中,集合格式可以為list格式、set格式或者數(shù)組格式等。集合類型可以為list類型、set類型或者數(shù)組類型等。
下面舉例說明上述循環(huán)賦值方式。
所述反序列化數(shù)據(jù)可以為josn格式的數(shù)據(jù):
{"inneripaddress":
["10.165.103.41","10.165.103.42"]}
其中,inneripaddress為所述第一屬性,所述第一屬性為集合格式。
生成的所述第一鍵值對可以為:
{user.inneripaddress[0]=10.165.103.41}
其中,user.inneripaddress[0]為所述第一鍵信息,10.165.103.41為所述第一值信息。其中,所述第一鍵信息能夠表示出所述第一屬性為集合格式,并且能夠表示出所述第一值信息位于所述集合格式的所述第一屬性的位置。例如user.inneripaddress[0]表示所述第一值信息為所述第一屬性的第0位。
可以通過以下java代碼建立第二子對象inneripaddress:
list<string>inneripaddress=newarraylist<string>();
可以通過以下java代碼對第二子對象inneripaddress賦值:
可以通過以下java代碼對所述第一屬性賦值:
user.setinneripaddress(inneripaddress);
其中,user為所述待重建對象。
對應與上述方法實施例,本申請還提供了反序列化裝置的實施例,下面 具體說明。
請參閱圖3,本申請實施例提供了反序列化裝置的一種裝置實施例,本實施例包括:獲取單元301、生成單元302和賦值單元303。
獲取單元301用于獲取序列化數(shù)據(jù),所述序列化數(shù)據(jù)包括待重建對象的第一屬性。
本申請實施例,所述序列化數(shù)據(jù)可以為xml格式或者json格式的數(shù)據(jù)。
所述序列化數(shù)據(jù)還包括第一屬性值,所述第一屬性與所述第一屬性值具有對應關系。
生成單元302用于對所述序列化數(shù)據(jù)進行解析以生成第一鍵值對。
在本申請實施例中,生成單元302可以對所述序列化數(shù)據(jù)進行解析生成所述第一鍵值對,所述第一鍵值對包括第一鍵信息和第一值信息,所述第一鍵信息和所述第一值信息具有對應關系。其中,所述第一鍵信息用于表示所述第一屬性,所述第一值信息用于表示所述第一屬性值。
賦值單元303用于根據(jù)預先設置的所述第一鍵信息和所述第一屬性的對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息。
在本申請實施例中,由于所述待重建對象具有所述第一屬性是所述待重建對象的固有特征,因此本申請無需通過反射的方式獲得所述待重建對象具有的屬性,而是可以預先設置出所述待重建對象具有的所述第一屬性與所述第一鍵信息具有對應關系,并根據(jù)該對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息。其中,所述第一鍵信息可以看作是所述第一屬性的屬性值的路徑,本申請實際上利用該路徑,查找到所述第一屬性的屬性值,即所述第一值信息,從而利用所述第一值信息對所述第一屬性進行賦值。
通過上述技術方案可知,本申請實施例獲取單元301獲取序列化數(shù)據(jù)后,生成單元302對所述序列化數(shù)據(jù)進行解析生成第一鍵值對,其中,所述序列化數(shù)據(jù)包括待重建對象的第一屬性,所述第一鍵值對包括具有對應關系的第一鍵信息和第一值信息。其中,由于所述待重建對象具有所述第一屬性是所述待重建對象的固有特征,因此本申請實施例中無需通過反射的方式獲得待重建對象具有的屬性,而是預先設置出所述第一屬性和所述第一鍵信息具有 對應關系,從而賦值單元303可以根據(jù)該對應關系,將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,實現(xiàn)了對所述待重建對象的所述第一屬性的反序列化??梢?,由于本申請實施例中無需通過反射的方式獲得待重建對象具有的屬性,因此不需要占用過多的硬件資源,從而提高了反序列化的效率。
此外,由于本申請無需通過反射的方式獲得待重建對象具有的屬性,因此不再存在編程語言不支持的問題,使得本申請的裝置實施例適用于多種不同的編程語言,例如java以及c#等。而且本申請首先根據(jù)反序列化數(shù)據(jù)生成所述第一鍵值對,再根據(jù)所述第一鍵值對對所述第一屬性進行賦值,即使所述序列化數(shù)據(jù)存在不同的格式,例如無論是xml格式還是json格式,也只需同一種程序即可實現(xiàn)對所述第一屬性的賦值。
在本申請實施例中,還可以通過調(diào)用api的方式獲得所述反序列化數(shù)據(jù)。具體地,本實施例中的獲取單元301具體用于:調(diào)用與所述待重建對象對應的api;獲取調(diào)用所述api的返回數(shù)據(jù),將所述返回數(shù)據(jù)作為所述序列化數(shù)據(jù)。
在上述實施例中,只介紹了對所述第一屬性的反序列化過程,若所述待重建對象還包括除所述第一屬性之外的其他屬性,可以按照類似方式對其他屬性進行反序列化。例如,所述待重建對象可以具有至少兩個屬性,則生成單元302可以對所述序列化數(shù)據(jù)進行解析生成鍵值對列表,所述鍵值對列表中包括至少兩個鍵值對,每個鍵值對中的鍵信息和值信息具有對應關系,賦值單元303通過鍵值對列表中的鍵信息查找相應的值信息,并賦值給所述待重建對象的相應的屬性。
例如,所述序列化數(shù)據(jù)還包括所述待重建對象的第二屬性。其中,所述序列化數(shù)據(jù)還包括第二屬性值,所述第二屬性與所述第二屬性值具有對應關系。
生成單元302還用于,對所述序列化數(shù)據(jù)進行解析以生成第二鍵值對,所述第二鍵值對包括第二鍵信息和第二值信息,所述第二鍵信息與所述第二值信息具有對應關系。所述第二鍵信息用于表示所述第二屬性,所述第二值 信息用于表示所述第二屬性值。所述第一鍵值對和所述第二鍵值對可以構(gòu)成鍵值對列表。在java語言中,所述鍵值對列表可以存儲到map對象里。
賦值單元303還用于,根據(jù)預先設置的所述第二鍵信息和所述第二屬性的對應關系,將所述第二屬性賦值為所述第二鍵信息對應的所述第二值信息。
還需說明的是,本申請中先根據(jù)所述反序列化數(shù)據(jù)生成所述第一鍵值對,再根據(jù)所述第一鍵值對對所述第一屬性進行賦值,而不是直接根據(jù)所述反序列化數(shù)據(jù)進行賦值,還具有減少對所述反序列化數(shù)據(jù)的解析次數(shù)的技術效果。
在本申請實施例中,所述第一屬性可以為簡單類型,也可以為復雜類型,下面分別說明。
簡單類型指的是所述第一屬性不具有子屬性,即所述第一屬性為所述待重建對象的直接屬性。對于簡單類型,賦值單元303直接將所述第一屬性賦值為所述第一值信息即可。
復雜類型指的是所述第一屬性具有子屬性。在本申請實施例中,若所述第一屬性為復雜類型,則本申請實施例的所述裝置還可以包括:第一建立單元,所述第一建立單元用于建立所述待重建對象的第一子對象;賦值單元301具體用于:根據(jù)預先設置的所述第一鍵信息和所述子屬性的對應關系,將所述第一子對象的屬性賦值為所述第一鍵信息對應的所述第一值信息。
在本申請實施例中,所述第一屬性還可以為集合格式,此時可以通過循環(huán)方式對所述第一屬性進行賦值。具體地,所述第一屬性為集合格式;本申請實施例的所述裝置還包括:第二建立單元,所述第二建立單元用于建立所述待重建對象的第二子對象,所述第二子對象為集合類型;當將所述第一屬性賦值為所述第一鍵信息對應的所述第一值信息,賦值單元303具體用于:通過循環(huán)方式將所述第二子對象的屬性賦值為所述第一鍵信息對應的所述第一值信息,以得到所述第二子對象的屬性值;將所述第一屬性賦值為所述第二子對象的屬性值。其中,集合格式可以為list格式、set格式或者數(shù)組格式等。集合類型可以為list類型、set類型或者數(shù)組類型等。
所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應 過程,在此不再贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本申請的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以說明本申請的技術方案,而非對其限制;盡管參照前述實施例對本申請進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案 的本質(zhì)脫離本申請各實施例技術方案的精神和范圍。