在 Kotlinx 序列化中使字段可选

Posted

技术标签:

【中文标题】在 Kotlinx 序列化中使字段可选【英文标题】:Make a field optional in Kotlinx serialization 【发布时间】:2021-09-12 11:54:17 【问题描述】:

这是我的 pojo 课

@Serializable
data class Response(
    @SerialName("message") val message: String?,
    @SerialName("parameters") val parameters: Map<String, String>?
)

这是 Json,我试图从以下位置解码:


   "message": "Some text"

这里,parameters 字段是可选的。当我尝试解码时

Json.decodeFromString<Response>(response)

我收到以下异常:

kotlinx.serialization.MissingFieldException: 字段“参数”是 序列名称为“响应”的类型是必需的,但它丢失了

如果Json 中缺少该字段,我期待将字段parameters 设置为null

【问题讨论】:

【参考方案1】:

您需要为 parameters 属性指定默认值,如下所示:

@Serializable
data class Response(
    @SerialName("message") val message: String?,
    @SerialName("parameters") val parameters: Map<String, String>? = null
)

您可以在此处阅读更多信息:https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/basic-serialization.md#optional-properties

【讨论】:

以上是关于在 Kotlinx 序列化中使字段可选的主要内容,如果未能解决你的问题,请参考以下文章

Kotlinx 序列化 - 如何为未知字段名编写数据类

Kotlinx 序列化,避免在其他数据类型上崩溃

@SerialInfo - 如何使用 Kotlinx 序列化管理用户定义的串行注释?

如何在 Kotlinx 序列化中序列化“任何”类型?

在 Kotlin/Native 中使用 kotlinx.serialization 进行多态反序列化

如何在 Bigquery 查询中使表可选