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].
и я думаю, что лучше, чтобы они (его разработчики) добавили его в следующие версии