I'm using gson to deserialize POJO objects from JSON representations.
I'd like one of the fields in one of my POJOs to contain arbitrary JSON data. For example:
class B {
public String stringField;
public JsonObject jsonField;
}
I'd like to be able to call Gson.fromJson(json, B.class)
on the following JSON:
{
"stringField": "booger",
"jsonField" :
{
"arbitraryField1": "foo"
}
}
and have the resulting B.jsonField
contain a JsonObject with an arbitraryField
of value foo
.
However, when I attempt to do this, jsonField
is always an empty object ({}
). In fact, more generally, it appears that the following always returns an empty object:
new Gson().fromJson("{ foo: 1 }", JsonObject.class)
I would expect the above to return an object containing a field named foo
of value 1.
How can I have gson preserve arbitrary json data when deserializing json to POJOS?
I was able to work around the problem by introducing a wrapper object that contains a JsonObject, and then writing a custom deserializer for that object that simply returns the original json. However, it seems like there must be a better way.
For posterity, the deserializer and the trivial wrapper object look like the following:
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;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With