5
Gson gson = new Gson();
System.out.println(gson.fromJson("1", Object.class));    //output:1.0
System.out.println(gson.fromJson("1", String.class));    //output:1
System.out.println(gson.fromJson("1", Integer.class));   //output:1

我正在尝试自定义一个反序列化器来修复它,但仍然无法正常工作:

Gson gson = new GsonBuilder().registerTypeAdapter(Object.class,new JsonDeserializer<Object>() {
    @Override
    public Object deserialize(JsonElement json, Type typeOfT,JsonDeserializationContext context)throws JsonParseException {
        return json.getAsInt();
    }
}).create();
System.out.println(gson.fromJson("1", Object.class));   //still 1.0

我在这里做错了吗?

4

3 回答 3

4

JSON 中没有整数。1.0 和 1 是一回事,除了 1.0 是显式的。

于 2012-09-05T14:35:57.387 回答
2

如果您的目标类有 int 成员,它将反序列化为 int。否则,如果您使用 fromJson 不带参数,只需将其转换为 (int) 即可。

于 2013-07-06T02:04:10.433 回答
1

我在这里做错了吗?

你正在做一些你最可能不需要的事情。此外,它确实是错误的,因为它会破坏除数字之外的所有内容。

IIRC,某些内置类型(包括Object)的 Gson 反序列化器不起作用。

每当您使用类似的东西List<Integer>时,json 都会被读取为 int,所以一切都很好。

在某些情况下,您可能会使用Something<Object>并想要获得Integer而不是Double在那里,但是我怀疑这样的代码是否有意义。如果确实如此,请为那里编写一个反序列化程序Something并解决问题。

于 2012-09-05T16:05:53.223 回答