java – 使用GSON反序列化包含JSON的对象

我正在使用gson从JSON表示中反序列化POJO对象.

我希望我的一个POJO中的一个字段包含任意JSON数据.例如:

class B {
    public String stringField;
    public JsonObject jsonField;
}

我希望能够在以下JSON上调用Gson.fromJson(json,B.class):

{
    "stringField": "booger",
    "jsonField" :
    {
        "arbitraryField1": "foo"
    }
}

并使得结果B.jsonField包含一个值为foo的arbitraryField的JsonObject.

但是,当我尝试这样做时,jsonField始终是一个空对象({}).事实上,更一般地说,以下似乎总是返回一个空对象:

new Gson().fromJson("{ foo: 1 }", JsonObject.class)

我希望上面的内容返回一个包含名为foo的值为1的字段的对象.

在将json反序列化为POJOS时,如何让gson保留任意json数据?

最佳答案
我能够通过引入一个包含JsonObject的包装器对象来解决这个问题,然后为该对象编写一个自定义反序列化器,它只返回原始的json.但是,似乎必须有更好的方法.

对于后代,反序列化器和普通包装器对象如下所示:

class MyJsonObjectWrapperDeserializer implements JsonDeserializer<MyJsonObjectWrapper> {
    @Override
    public MyJsonObjectWrapper deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return new MyJsonObjectWrapper(json.getAsJsonObject());
    }
}

class MyJsonObjectWrapper {
    public JsonObject json;

    public MyJsonObjectWrapper(JsonObject json) {
        this.json = json;
    }
}

转载注明原文:java – 使用GSON反序列化包含JSON的对象 - 代码日志