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

时间:2012-07-10 06:06:51

标签: java initialization gson

将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就足够了


关闭

1 个答案:

答案 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());