将 JSON 反序列化为class Foo{int id; List<String> items; List<Long> dates;}
时 反序列化后如何自动初始化为空的字段。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 类
的知识感谢
编辑:抱歉,只需将Getters放在Foo中就足够
了闭
您需要创建自定义反序列化程序。
假设你的类被称为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());