這個(gè)問(wèn)題實(shí)在是不知道怎么取標(biāo)題異常如下:Exceptioninthread"main"java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMapcannotbecasttoXXX我舉例說(shuō)明:已知有一個(gè)User類,包含了一些簡(jiǎn)單的屬性publicclassUser{privateStringuserName;privateStringgender;//getset方法省略}然后我有一個(gè)專門用于數(shù)據(jù)傳輸?shù)膉son包裝類publicclassJsonMessage{privateIntegercode;privateStringmsg;privateTdata;//getset方法省略}然后我有一個(gè)主方法publicstaticvoidmain(String[]args){//有一個(gè)待序列化的json字符串StringjsonStr="{'code':123,'msg':'test','data':{'userName':'baofeidyz','gender':'male'}}";//然后使用Gson序列化Gsongson=newGson();JsonMessagemessage=gson.fromJson(jsonStr,JsonMessage.class);//然后在這里我嘗試獲取data中的數(shù)據(jù),就報(bào)//Exceptioninthread"main"java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMapcannotbecasttoUser}可是當(dāng)我不使用泛型的時(shí)候就是OK的:我這里有一個(gè)新的json包裝類publicclassJsonMessage2{privateIntegercode;privateStringmsg;privateUserdata;//getset方法省略}然后我又新建了一個(gè)新的main方法:publicstaticvoidmain(String[]args){//還是那個(gè)待序列化的json字符串StringjsonStr="{'code':123,'msg':'test','data':{'userName':'baofeidyz','gender':'male'}}";//然后使用Gson序列化Gsongson=newGson();//這里換成了新的包裝類JsonMessage2message=gson.fromJson(jsonStr,JsonMessage2.class);//然后就成功獲取到了數(shù)據(jù)}代碼是我在segmentfault網(wǎng)頁(yè)現(xiàn)敲的,但是問(wèn)題是和我實(shí)際問(wèn)題一樣。個(gè)人覺(jué)得主要是我對(duì)泛型和Gson的序列化方式理解有問(wèn)題,所以想請(qǐng)教一下各位,感謝!
Gson(泛型)如何“動(dòng)態(tài)”反序列化類屬性ClassCastException
冉冉說(shuō)
2019-05-23 11:10:54