GSON:在不使用全局serializeNulls()的情况下序列化单个空字段

GLe*_*Lee 11 android json gson

我正在使用Gson和Retrofit,我有一个案例,我需要序列化一个空字段,但我不能打开Gson的全局serializeNulls()标志,因为它将打破我的其余代码.有谁知道如何做到这一点?

这是我尝试过的:

  • 制作注释@SerializeNull.这将是理想的解决方案,但它失败了,因为serializeNulls标志实际上在JsonWriter上,它是ExclusionStrategy的下游.
  • 使用TypeAdapterFactory.同样,JsonWriter是下游的.

我也无法找到添加到序列化json的方法,因为它全部发生在Retrofit中.

小智 1

我通过设置 setSerializeNulls(true) 并在 TypeAdapter.write() 中将原始值恢复为 JsonWriter 解决了这个问题:

public class NullableDoubleAdapter extends TypeAdapter<NullableDouble> {

  @Override
  public void write(final JsonWriter out, final NullableDouble value) throws IOException {
    if (value == null) {
      boolean serializeNulls = out.getSerializeNulls();
      out.setSerializeNulls(true);
      out.nullValue();
      out.setSerializeNulls(serializeNulls);
    } else {
      out.value(value.getValue());
    }
  }
...
Run Code Online (Sandbox Code Playgroud)