Reputation: 43913
I have a List<List<Integer>>
with value
[[537316070],[306297332],[319303159],[538639811],[528406093],[166705854],[124574525],[967403337],[569514785],[304831454],[219384921],[308948513],[355538394],[297996417]]
after serializing it with Gson.
When I deserialize it using
List<List<Integer>> data = (List<List<Integer>>) GsonParser.gson.fromJson(datastr, List.class);
I am getting
[[5.3731607E8], [3.06297332E8], [3.19303159E8], [5.38639811E8], [5.28406093E8], [1.66705854E8], [1.24574525E8], [9.67403337E8], [5.69514785E8], [3.04831454E8], [2.19384921E8], [3.08948513E8], [3.55538394E8], [2.97996417E8]]
Does anyone know whats wrong?
Thanks
Upvotes: 0
Views: 900
Reputation: 280138
Gson
, by default, parses any JSON number into a double
. This happens in the ObjectTypeAdapter#read(JsonReader)
method:
...
case NUMBER:
return in.nextDouble();
...
Do the following
List<List<Integer>> data = GsonParser.gson.fromJson(json, new TypeToken<List<List<Integer>>>() {}.getType());
to get them as Integer
instances.
The TypeToken
is a Java hack to get the actual generic parameter types. The javadoc states
Constructs a new type literal. Derives represented class from type parameter.
Clients create an empty anonymous subclass. Doing so embeds the type parameter in the anonymous class's type hierarchy so we can reconstitute it at runtime despite erasure.
Upvotes: 2