Я создал собственный десериализатор для своего класса Person.Это только для демонстрации.Мой настоящий класс более сложный.
Файл json содержит версию формата, а после этого массив персон.
В версии 1.0 у меня есть имя и возраст для каждого человека.
В версии 2.0 у меня есть имя , возраст и дополнительно пол .
Моя проблема здесь в том, что у меня нет доступа к версии в пользовательском десериализаторе, или, по крайней мере, я не выяснил, как ее получить.
Есть ли другой способ сделать это без jsonObj.get("gender").has();
или if (jsonObj.get("gender") != null)
?
GSON Версия: 2.8.5
Десериализатор:
private class PersonDeserializer implements JsonDeserializer<PersonDatapoint>
{
@Override
public PersonDatapoint deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
JsonObject jsonObj = json.getAsJsonObject();
// version 1.0
Person person = new Person(jsonObj.get("name").getAsString());
person.setAge(jsonObj.get("age").getAsInt());
// version 2.0
// how to determine version field in json File?
// person.setGender(jsonObj.get("gender").getAsString());
return person;
}
}
JSON-файлv1.0:
{
"version": "1.0",
"persons": [
{
"name": "Alex",
"age": 30
},
{
"name": "John",
"age": 31
},
{
"name": "Elise",
"age": 32
}]
}
JSON File v2.0:
{
"version": "2.0",
"persons": [
{
"name": "Alex",
"age": 30,
"gender": "male"
},
{
"name": "John",
"age": 31,
"gender": "male"
},
{
"name": "Elise",
"age": 32,
"gender": "female"
}]
}