List <type>和java.lang.ClassCastException:com.google.gson.internal.StringMap

时间:2018-11-19 14:26:44

标签: java json gson javabeans classcastexception

在我的职能下,

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;
}

但系统返回此异常:

java.lang.ClassCastException:com.google.gson.internal.StringMap

我还注意到,如果我使用以下行代码

Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();

它可以工作,但是我的目标是尽可能地通用,以使我的代码更高效。

我应该如何更改代码以使其也可以通过类型“ T”而不是“ ShapeBean”使用?

1 个答案:

答案 0 :(得分:0)

已解决。感谢下面代码的kan链接:

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