Gson,自动初始化并避免空异常



将 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());

最新更新