在使用 GSON 将 Kotlin 数据类序列化为 JSON 时,我们需要区分可选字段与可为空字段(即,当存在一个字段时,它可以为空)。
最初的想法是将可选字段建模为泛型:
class Optional<T>(val isPresent: Boolean = false, val value: T) {}
这将允许在以下可序列化数据类中表示它:
data class SimpleRequest (
val a: Int = 0,
val b: Optional<String> = Optional<String>(value = "")
val c: Optional<String> = Optional<String>(value = "")
val d: Int? = null,
val e: Optional<Int?> = Optional<Int?>(value = null)
)
这将导致以下序列化变体(启用空序列化):
SimpleRequest(c = Optional<String>(true, "Hello"), e = Optional(true, null))
{
"a": 0,
"c": "Hello",
"d": null,
"e": null
}
这可能吗?