Gson Как конвертировать JSON в пользовательский класс

Somary для ниже: мне нужно дезерилизовать A<B<C>> из JSON с библиотекой Java Gson

У меня есть API, что ответ в этом шаблоне (Json):

{code:string, message:string, data:(any json type/object/array)}

В Java я определяю класс для чтения результатов:

public class ApiResult <DATA> {
    public String code;
    public String message;
    public DATA data;
}

И у меня есть другой класс данных:

public class Ball {
    public String color;
    public String weight;
}

Один из моих методов API возвращает список шаров в верхнем шаблоне. я использую GSON.fromJson(reader, new TypeToken<ApiResult<List<Ball>>>() {}.getType());

Но Gson прочитал данные в List<com.google.gson.internal.LinkedTreeMap> не список

Как я могу это исправить?

1 ответ

Наконец я решаю свой вопрос, но не для всех A<B<C>> проблемы

Я переопределяю мой ApiResult класс для:

public class ApiResult {
    public String code;
    public String message;
    public JsonElement data; 
}

С помощью result = GSON.fromJson(reader, ApiResult.class); Я извлекаю глобальный ответ (все ответы API возвращают эту часть). и проверить code а также message что мне нужно

затем я извлекаю реальные данные, которые хочу final List<Ball> data = GSON.fromJson(result.data, new TypeToken<List<Ball>>() {}.getType()); и верни это

Я думаю, что основная ошибка / ограничение в Gson заключается в том, что он проверяет Generic Type только один раз для родительского типа и не проверяет его для универсального типа [s].

и я думаю, что лучше, чтобы они (его разработчики) добавили его в следующие версии

Другие вопросы по тегам