将json反序列化为class Foo{int id; List<String> items; List<Long> dates;}
如何在反序列化后自动初始化null的字段。 Gson lib有这样的可能吗?
例如:
Foo foo = new Gson().fromJson("{\"id\":\"test\", \"items\":[1234, 1235, 1336]}", Foo.class)
foo.dates.size(); -> 0 and not null pointerException
我知道如果(foo.attr == null)foo.attr = ...
我可以做
但我在寻找更通用的代码,而不了解Foo类
THX
编辑:抱歉将Getters放入Foo就足够了
关闭
答案 0 :(得分:0)
您需要创建自定义反序列化器。
假设您的班级名为MyAwesomeClass
,您可以实施类似
MyAwesomeClassDeserializer implements JsonDeserializer<MyAwesomeClass> {
@Override
public MyAwesomeClass deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) throws JsonParseException
{
// TODO: Do your null-magic here
}
并将其注册到GSON,如下所示:
Gson gson = new GsonBuilder()
.registerTypeAdapter(MyAwesomeClass.class, new MyAwesomeClassDeserializer())
.create();
现在,您只需调用fromJson(String, TypeToken)
方法即可获取反序列化对象。
MyAweSomeClass instance = gson.fromJson(json, new TypeToken<MyAwesomeClass>(){}.getType());