残念ながら、これはそれほど単純ではありません。独自のデシリアライザーを作成する必要があります。ソース コードから次のクラスをコピー アンド ペーストすることをお勧めします: ObjectTypeAdapter、MapTypeAdapterFactory、および補助クラス TypeAdapterRuntimeTypeWrapper。次の行を置き換えて MapTypeAdapterFactory.create メソッドを修正します。
TypeAdapter<?> valueAdapter = gson.getAdapter(TypeToken.get(keyAndValueTypes[1]));
と
TypeAdapter<?> valueAdapter = MyObjectTypeAdapter.FACTORY.create(gson, TypeToken.get(keyAndValueTypes[1]));
次の行を置き換えて ObjectTypeAdapter.read メソッドを修正します。
case NUMBER:
return in.nextDouble();
と
case NUMBER:
return in.nextLong();
最後に、カスタム マップ シリアライザーを gson に登録します。
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.registerTypeAdapterFactory(new MyMapTypeAdapterFactory(new ConstructorConstructor(Collections.<Type, InstanceCreator<?>>emptyMap()), false))
.create();
これで、JSON の「NUMBER」データはすべて long に逆シリアル化されます。