There is no difference in the json standard between integers and doubles, there is only a type of number. This is why gson converts numbers to doubles by default, unless you give it what type you want.
A simple fix will be to use TypeToken and change the data structure to multiple arrays or a custom object (for example, in the @totoro demo ).
new Gson().fromJson(levelPatternGson, new TypeToken<List<Integer>>() {}.getType());
But you can also write your own list deserializer:
public static class ListDeserializerDoubleAsIntFix implements JsonDeserializer<List>{ @Override @SuppressWarnings("unchecked") public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return (List) read(json); } public Object read(JsonElement in) { if(in.isJsonArray()){ List<Object> list = new ArrayList<Object>(); JsonArray arr = in.getAsJsonArray(); for (JsonElement anArr : arr) { list.add(read(anArr)); } return list; }else if(in.isJsonObject()){ Map<String, Object> map = new LinkedTreeMap<String, Object>(); JsonObject obj = in.getAsJsonObject(); Set<Map.Entry<String, JsonElement>> entitySet = obj.entrySet(); for(Map.Entry<String, JsonElement> entry: entitySet){ map.put(entry.getKey(), read(entry.getValue())); } return map; }else if( in.isJsonPrimitive()){ JsonPrimitive prim = in.getAsJsonPrimitive(); if(prim.isBoolean()){ return prim.getAsBoolean(); }else if(prim.isString()){ return prim.getAsString(); }else if(prim.isNumber()){ Number num = prim.getAsNumber();
and use it as follows:
GsonBuilder builder=new GsonBuilder(); List<List> levelPattern = Arrays.asList(Arrays.asList(2131558489L, 2L, 3L), Arrays.asList("one", "two", "three")); String levelPatternGson = new Gson().toJson(levelPattern); List levelPattern2 = new GsonBuilder() .registerTypeAdapter(List.class, new ListDeserializerDoubleAsIntFix()) .create() .fromJson(levelPatternGson, List.class); System.out.println(levelPattern2);
Json: [[2131558489,2,3], ["one", "two", "three"]]
Output: [[2131558489, 2, 3], [one, two, three]]