【发布时间】:2019-01-02 20:05:13
【问题描述】:
我为我的 Person 类创建了一个自定义反序列化器。这仅用于演示目的。我的实际课程更复杂。
json 文件包含格式的版本,然后是人员数组。
在 1.0 版中,我为每个人设置了一个姓名和年龄。
在 2.0 版中,我有 name、age 以及 gender。
我的问题是我无法访问自定义反序列化器中的版本,或者至少还不知道如何获取它。
如果没有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 文件 v2.0:
{
"version": "2.0",
"persons": [
{
"name": "Alex",
"age": 30,
"gender": "male"
},
{
"name": "John",
"age": 31,
"gender": "male"
},
{
"name": "Elise",
"age": 32,
"gender": "female"
}]
}
【问题讨论】:
标签: java json gson deserialization versioning