TypeToken is a trick for getting type information for a generic type at runtime. However, passing it a generic type parameter (T), because of the erasure of the type, what you are doing is efficient:
Type listType = new TypeToken<ArrayList<Object>>(){}.getType();
This does not give Gson the necessary information necessary to deserialize the list correctly, so it does not properly deserialize.
One solution could be to pass a type marker as a parameter to mapFromJsonArray:
public static <T> List<T> mapFromJsonArray(String respInArray, Type listType) { List<T> ret = new Gson().fromJson(respInArray, listType); return ret; } List<MyObj> myObjResponse = JsonUtil.<MyObj>mapFromJsonArray( jsonResponse, new TypeToken<ArrayList<MyObj>>(){}.getType()); for(MyObj obj : myObjResponse){
source share