GSON Десериализация, создание подкласса

246
05 апреля 2018, 15:02

Здравствуйте, интересует как можно создать подкласс ListHistory в Person, без сеттеров и передачи уже готового ListHistory.

Имеется такой JSON:

{
 "name":"Alexander",
 "AllHistory":[
   {
   "key":"key",
   "value":"value"
   }
 ]
}

Классы:

class Person {
   @SerializedName("name")
   String name;
   ListHistory listHistory;
}
class ListHistory{
    List<History> history = new ArrayList<>();
}
class History{
   String key;
   String value;
}

Deserializer:

@Override
public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    Gson gson = new Gson();
    JsonElement data = json.getAsJsonObject().get("name");
    return gson.fromJson(data, Person.class);
}
Answer 1

Все как всегда проще, чем кажется.... :)

Чтоб это провернуть необходимо создать еще один deserialize для ListHistory, и регистрировать его не обязательно.

В deserialize для Person, необходимо обратиться к контексту (JsonDeserializationContext) и вызвать десериализацию уже для ListHistory

context.deserialize(data.getAsJsonObject().get("AllHistory").getAsJsonArray(),
new TypeToken<ListHistory>() {
    }.getType()
);

Ну, а далее описываем deserialize для ListHistory.

И да будет свет xD

READ ALSO
JtextArea для вывода результата

JtextArea для вывода результата

Столкнулся с такой проблемойКак вывести данные на экран в поле jtextArea? JtextArea описан в одном классе, данные для вывода получаются из другого...

170
Как сделать открытие recyclerView с конца?

Как сделать открытие recyclerView с конца?

Я сделал клиент по обмену сообщениями, в котором сообщения отображаются при помощи recyclerView, но список открывается в самом начале(наверху),...

189
Ошибка при получении имени файлов из директории

Ошибка при получении имени файлов из директории

ЗдравствуйтеВот код для получения массива имени файлов из директории:

230
Java Websocket onmessage null

Java Websocket onmessage null

ЗдравствуйтеПочему в следующем коде переменная _message в методе Message получает null?

212