【问题标题】:Retrofit2/ Gson null values are not skipped when DEFAULT_SERIALIZE_NULLS value is used使用 DEFAULT_SERIALIZE_NULLS 值时不会跳过 Retrofit2/Gson 空值
【发布时间】:2020-05-13 23:10:33
【问题描述】:

我遇到了一些未知错误。这打破了我对 Kotlin 数据类和 Api 响应的零安全假设。

说,我有一个数据类说Person

 data class Person(val name: String) {
    constructor() : this("")
}

这将生成一个具有默认名称值的对象 Person,即非 null。 早些时候,当我使用带有GsonConverterFactory.create()(作为转换器工厂添加)的默认改造客户端时。在默认模式下,Gson 不会序列化 null 值。但是今天我发现这个字段被序列化为 null。

我在ReflectiveTypeAdapterFactory https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java#L206 中验证相同

这里 instance 值具有非空字段,但在读取每个字段 (field.read(in, instance);) 后,它正在分配空值。 我希望在序列化期间跳过空值还是反序列化?


编辑: 看起来它是反序列化空值而不是序列化空值问题。 参考:https://github.com/google/gson/issues/1148

如果有任何细节遗漏或造成混淆,请告诉我。

【问题讨论】:

  • 你能发布相关的JSON吗?
  • 这只是一个示例数据类。看起来在反序列化期间,使用默认 gson 转换器时不会跳过空值。

标签: android json kotlin gson retrofit2


【解决方案1】:

你必须通过改变类型使 name 参数可以为空;

String

String?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多