最近在用Gson解析json数据时,遇到了一个Gson解析带泛型的List集合的问题。由于不好百度,所有在此简单说一下我的解决办法…
由于最近项目需要我用Gson来解析JSON数据,并且返回的类型要求是一个List集合。因此我就直接用下面的代码成功解析:
public static List
public static <T> List<T> jsonFromList(String jsonString, Class<T> cls) {
List<T> list = null;
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
}.getType());
} catch (Exception e) {
}
return list;
}
本来以为这样就能达到我想要的效果,但是…它居然报错了…。报 java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.example.Model.MessagesModel 这个错误。于是经过我的几经百度终于找到了解决办法。其报错的原因就是 泛型在编译期类型被擦除导致的 。于是我就通过下面的代码解决了问题:
public static <T> List<T> fromJsonList(String json, Class<T> clazz) {
List<T> lst = new ArrayList<>();
try {
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for (final JsonElement elem : array) {
lst.add(new Gson().fromJson(elem, clazz));
}
} catch (Exception e) {
}
return lst;
}
上面就是我这次遇到的问题及解决办法,当然还有其他解决办法,就靠读者自己去研究,收工。