【问题标题】:why is this null value not being serialized?为什么这个空值没有被序列化?
【发布时间】:2018-04-20 19:54:19
【问题描述】:

所以我有一个我们要序列化到 gson 的对象,end 的值为空。但是,end 的整个键值对并没有在 json 对象中显示为 null,而只是从 json 对象中丢失。

这里是对象的 POJO。

public static class History {
   @NonNull
   public final String areaId;
   @NonNull
   public final String userId;
   public final long start;
   @Nullable
   public final Long end;
   public History(@NonNull String areaId, @NonNull String userId, long start, @Nullable Long end) {
        this.areaId = areaId;
        this.userId = userId;
        this.start = start;
        this.end = end;
   }
}

这里是 gson 生成器

GsonBuilder()
    .serializeNulls()
    .registerTypeAdapter(Date.class, new DateFormatter())
    .setFieldNamingStrategy(fieldNamingStrategy)
    .create();

这就是 json 的实际样子

areaUserHistories": {
         "aff824c6-df4f-49b4-8dea-6c204cb7bb16": {
         "areaId": "ca5f5e6f-77eb-4859-a2ad-c3b249e53493",
         "start": 1524178713,
         "userId": "911705136"
        }
    } 

应该是这个样子,

areaUserHistories": {
         "aff824c6-df4f-49b4-8dea-6c204cb7bb16": {
         "areaId": "ca5f5e6f-77eb-4859-a2ad-c3b249e53493",
         "start": 1524178713,
         "end": null
         "userId": "911705136"
        }
    },

EIDT 1

所以我在试验,将这行代码添加到 GsonBuilder,.setLongSerializationPolicy(LongSerializationPolicy.STRING)

因此 Gson Builder 现在将 Long 值转换为字符串。这导致正确添加了 end=null 值。不幸的是,该值必须是 Long。

【问题讨论】:

  • 什么键值对?请提供minimal reproducible example
  • 请向我们展示一些输入和输出
  • 我已经编辑了“end”变量是空值的问题。我添加了实际的 json 和预期的 json。
  • 显示使用 Gson 实例的代码。使用 GsonBuilder.serializeNulls 时,我无法在最小样本中重现此行为。
  • @EricCochran GsonModule 正在 Retrofit 库中使用,我一直无法找到实际使用 GsonModule 的类。

标签: java gson retrofit2


【解决方案1】:
GsonBuilder gsonBuilder = new GsonBuilder();

gsonBuilder.serializeNulls();

Gson gson = gsonBuilder.create();

String jsonString = gson.toJson(object); 

【讨论】:

  • OP 已经有了这个确切的代码。这如何回答这个问题?
  • 不,不是。仔细看
  • 如果你解释是什么让这个答案成为相关答案,他根本不用看。
  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
相关资源
最近更新 更多