I want to serialize nulls for a specific field or class.
In GSON, the option serializeNulls()
applies to the whole JSON.
Example:
Create subclass of com.google.gson.TypeAdapter
and register it for required field using annotation com.google.gson.annotations.JsonAdapter
. Or register it using GsonBuilder.registerTypeAdapter
. In that adapter write
(and read
) should be implemented. For example:
public class JsonTestNullableAdapter extends TypeAdapter {
@Override
public void write(JsonWriter out, Test value) throws IOException {
out.beginObject();
out.name("name");
out.value(value.name);
out.name("value");
if (value.value == null) {
out.setSerializeNulls(true);
out.nullValue();
out.setSerializeNulls(false);
} else {
out.value(value.value);
}
out.endObject();
}
@Override
public Test read(JsonReader in) throws IOException {
in.beginObject();
Test result = new Test();
in.nextName();
if (in.peek() != NULL) {
result.name = in.nextString();
} else {
in.nextNull();
}
in.nextName();
if (in.peek() != NULL) {
result.value = in.nextString();
} else {
in.nextNull();
}
in.endObject();
return result;
}
}
in MainClass
add JsonAdapter
annotation with the adapter to Test
class field:
public static class MClass {
public String id;
public String name;
@JsonAdapter(JsonTestNullableAdapter.class)
public Test test;
}
the output of System.out.println(new Gson.toJson(mainClass))
is:
{
"id": "101",
"test": {
"name": "testName",
"value": null
}
}