Kotlin@Serializable跳过具有默认值的属性

ubof19bj  于 2023-01-09  发布在  Kotlin
关注(0)|答案(1)|浏览(187)

为什么JSON没有默认值的内容属性?
我想这是序列化只有什么是真正需要重建对象,但完全无用的,当我只是想创建API JsonResponses...

import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.encodeToJsonElement

@Serializable
data class Test(
    val required: String,
    val defaulted: String = "default",
)

val test = Test(
   required = "set"
)

println(Json.encodeToJsonElement(test))

// Result= {"required":"set"}
pw9qyyiw

pw9qyyiw1#

文档中给出的原因是为了避免视觉混乱。
如本文文档所述,如果希望将具有默认值的属性包含在JSON中,可以使用@EncodeDefault标记这些属性:

@Serializable
data class Test(
    val required: String,
    @EncodeDefault val defaulted: String = "default",
)

或者,如果您想在没有注解的情况下在任何地方都这样做,请创建一个定制的Json编码器,如下所示(文档在这里):

val encodeDefaultsJson = Json { encodeDefaults = true }
println(encodeDefaultsJson.encodeToJsonElement(test))

相关问题