Здравствуйте, интересует как можно создать подкласс 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);
}
Все как всегда проще, чем кажется.... :)
Чтоб это провернуть необходимо создать еще один deserialize для ListHistory, и регистрировать его не обязательно.
В deserialize для Person, необходимо обратиться к контексту (JsonDeserializationContext) и вызвать десериализацию уже для ListHistory
context.deserialize(data.getAsJsonObject().get("AllHistory").getAsJsonArray(),
new TypeToken<ListHistory>() {
}.getType()
);
Ну, а далее описываем deserialize для ListHistory.
И да будет свет xD
Сборка персонального компьютера от Artline: умный выбор для современных пользователей