Рассмотрит эту простую JSon:GSON - Deserialize примитивного массив
{
"test": [
0,
3
]
}
Теперь я десериализация его в простом целочисленном массиве, так для этого я использую пользовательский десериализатор:
class ArrayDeserializer implements JsonDeserializer<int[]> {
@Override
public int[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return context.deserialize(json.getAsJsonObject().getAsJsonArray("test"), int[].class);
}
}
и затем:
Gson gson = new GsonBuilder().registerTypeAdapter(int[].class, new ArrayDeserializer()).create();
int[] arr = gson.fromJson(json, int[].class);
, который бросает:
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Not a JSON Object: [0,3]
Однако, когда я делаю это:
class ArrayDeserializer implements JsonDeserializer<int[]> {
private static final Gson gson = new Gson();
@Override
public int[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return gson.fromJson(json.getAsJsonObject().getAsJsonArray("test"), int[].class);
}
}
это работает, и я получаю ожидаемый результат. Зачем?