使用Gson解析Json數組遇到的泛型類型擦除問題解決方法

谷歌Gson轉換Json串有以下方法:json

public Object fromJson(String json, Type typeOfT);
1
能夠使用它進行數組解析。以下,使用此方法解析Json串爲類型MyBean的List數組,方法可用。數組

List<MyBean> lst = new Gson().fromJson(data, new TypeToken<List<MyBean>>(){}.getType());
1
但若是把MyBean改成泛型T,封裝此方法爲以下:.net

List<T> lst = new Gson().fromJson(data, new TypeToken<List<T>>(){}.getType());
public static <T> List<T> parseJson2List(String data, Class<T> clazz){
try {
return new Gson().fromJson(data, new TypeToken<List<T>>(){}.getType());
} catch(Throwable e){
e.printStackTrace();
return null;
}
}
1
2
3
4
5
6
7
8
9
例,實例化泛型爲Test調試

class Test {
private String id;
private String name;
private String value;
}
1
2
3
4
5
調用封裝方法以下:orm

List<Test> lst = parseJson2List(new String("[{id:'myid',name:'myname',value:'myvaule'},{id:'myid',name:'myname',value:'myvaule'}]"), Test.class);
1
調試結果以下圖,數組對象爲LinkedTreeMap類型,並非預期的Test類型。
在這裏插入圖片描述對象

緣由:泛型在編譯期類型擦除致使,類型擦除可見以下連接:blog

http://stackoverflow.com/questions/20773850/gson-typetoken-with-dynamic-arraylist-item-typetoken

http://blog.csdn.net/gstormspire/article/details/7638638圖片

解決方法:get

public static <T> List<T> fromJsonArray(String json, Class<T> clazz) throws Exception { List<T> lst = new ArrayList<T>(); JsonArray array = new JsonParser().parse(json).getAsJsonArray(); for(final JsonElement elem : array){ lst.add(new Gson().fromJson(elem, clazz)); } return lst; }

相關文章
相關標籤/搜索