Search code examples
javajsongsonjavabeansclasscastexception

List<Type> and java.lang.ClassCastException: com.google.gson.internal.StringMap


Below my function,

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

but the system returns this exception:

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

I notice also that if I use the following line code

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

it works, but my target is to be absolutly as generic as possible to make my code more efficient.

How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?


Solution

  • Solved. Thanks to kan's link below the code:

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

    check also this: Gson TypeToken with dynamic ArrayList item type