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.0 と 1 は同じものです。

于 2012-09-05T14:35:57.387 に答える
1

ここで何か間違ったことをしていますか?

あなたはおそらく必要のないことをしています。さらに、数字以外のすべてで壊れるので、それは本当に間違っています。

一部の組み込み型 ( を含む) の IIRC、Gson デシリアライザーは機能Objectしません。

のようなものを使用するたびList<Integer>に、json は int として読み取られるため、すべて問題ありません。

そこにあるのではなく、使用Something<Object>して取得したい場合があるかもしれませんが、そのようなコードが意味をなすかどうかは疑問です. その場合は、デシリアライザーを作成して、そこで問題を修正してください。IntegerDoubleSomething

于 2012-09-05T16:05:53.223 に答える