Java Gson解析没有正确反序列化

时间:2013-11-24 21:29:41

标签: java serialization gson

我有List<List<Integer>> 有价值的

[[537316070],[306297332],[319303159],[538639811],[528406093],[166705854],[124574525],[967403337],[569514785],[304831454],[219384921],[308948513],[355538394],[297996417]]

用Gson序列化后。

当我使用

反序列化它时
List<List<Integer>> data = (List<List<Integer>>) GsonParser.gson.fromJson(datastr, List.class);

我正在

[[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]]

有谁知道什么是错的?

由于

1 个答案:

答案 0 :(得分:2)

默认情况下,

Gson会将任何JSON号解析为double。这种情况发生在ObjectTypeAdapter#read(JsonReader)方法中:

...
case NUMBER:
  return in.nextDouble();
...

执行以下操作

List<List<Integer>> data = GsonParser.gson.fromJson(json, new TypeToken<List<List<Integer>>>() {}.getType());

将它们作为Integer个实例。

TypeToken是获取实际通用参数类型的Java hack。 javadoc

  

构造一个新类型的文字。从类型派生表示类   参数。

     

客户端创建一个空的匿名子类。这样做会嵌入类型   我们可以在匿名类的类型层次结构中使用参数   尽管擦除,但在运行时重新构建它。