4

将 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

我知道我可以做 if (foo.attr == null) foo.attr = ...
但我正在寻找更通用的代码,而不知道 Foo 类
thx

编辑:抱歉,只需将 Getters 放入 Foo 就足够了


关闭

4

1 回答 1

1

您需要创建自定义反序列化程序。

假设你的类被调用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());
于 2012-07-10T08:22:58.550 回答