使用 DEFAULT_SERIALIZE_NULLS 值时不会跳过 Retrofit2/Gson 空值

Kil*_*ler 5 android json gson kotlin retrofit2

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

说,我有一个数据类说Person

 data class Person(val name: String) {
    constructor() : this("")
}
Run Code Online (Sandbox Code Playgroud)

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

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

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


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

如果缺少任何细节或造成混淆,请告诉我。

Mas*_*rzi 2

您必须通过更改类型使名称参数可以为空;

String
Run Code Online (Sandbox Code Playgroud)

String?
Run Code Online (Sandbox Code Playgroud)