列表<Type>和java.lang.ClassCastException:com.google.gson.internal.StringMap
List<Type> and java.lang.ClassCastException: com.google.gson.internal.StringMap
下面我的函数,
public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}
但是系统returns这个异常:
java.lang.ClassCastException: com.google.gson.internal.StringMap
我还注意到,如果我使用以下行代码
Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();
它有效,但我的目标是绝对尽可能通用以使我的代码更有效率。
我应该如何更改我的代码以使其可用,同时传递类型 "T" 而不是 "ShapeBean"?
已解决。感谢kan的link下面的代码:
public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {
List<T> lst = new ArrayList<T>();
try {
// Consuming remote method
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(jsonCommand).getAsJsonArray();
for(final JsonElement json: array){
Gson g = new Gson();
T entity = g.fromJson(json, clazz);
lst.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
} return lst;
}
还要检查这个:
Gson TypeToken with dynamic ArrayList item type
下面我的函数,
public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}
但是系统returns这个异常:
java.lang.ClassCastException: com.google.gson.internal.StringMap
我还注意到,如果我使用以下行代码
Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();
它有效,但我的目标是绝对尽可能通用以使我的代码更有效率。
我应该如何更改我的代码以使其可用,同时传递类型 "T" 而不是 "ShapeBean"?
已解决。感谢kan的link下面的代码:
public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {
List<T> lst = new ArrayList<T>();
try {
// Consuming remote method
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(jsonCommand).getAsJsonArray();
for(final JsonElement json: array){
Gson g = new Gson();
T entity = g.fromJson(json, clazz);
lst.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
} return lst;
}
还要检查这个: Gson TypeToken with dynamic ArrayList item type