@Override public void toJson(JsonWriter writer, @Nullable T value) throws IOException { boolean serializeNulls = writer.getSerializeNulls(); writer.setSerializeNulls(true); try { delegate.toJson(writer, value); } finally { writer.setSerializeNulls(serializeNulls); } } @Override boolean isLenient() {
@Override public void toJson(JsonWriter writer, @Nullable T value) throws IOException { boolean serializeNulls = writer.getSerializeNulls(); writer.setSerializeNulls(true); try { delegate.toJson(writer, value); } finally { writer.setSerializeNulls(serializeNulls); } } @Override boolean isLenient() {
@Test public void maintainsPreviousSerializationValue() throws Exception { JsonAdapter<Data1> adapter = moshi.adapter(Data1.class); Data1 data1 = new Data1(); JsonWriter writer1 = JsonWriter.of(new Buffer()); writer1.setSerializeNulls(true); adapter.toJson(writer1, data1); assertThat(writer1.getSerializeNulls()).isTrue(); JsonWriter writer2 = JsonWriter.of(new Buffer()); writer2.setSerializeNulls(false); adapter.toJson(writer2, data1); assertThat(writer2.getSerializeNulls()).isFalse(); }
/** * Recursively writes the respective roots forming a json object that resembles the {@code path} * wrapping the type of the {@code adapter}. */ private static <T> void toJson(JsonAdapter<T> adapter, JsonWriter writer, T value, String[] path, int index) throws IOException { if (value != null || writer.getSerializeNulls()) { if (index == path.length) { adapter.toJson(writer, value); } else { writer.beginObject(); writer.name(path[index]); toJson(adapter, writer, value, path, ++index); writer.endObject(); } } else { // If we don't propagate the null value the writer will throw. writer.nullValue(); } } }