【发布时间】: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 的类。