You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kotlin encodeToString序列化时丢失isCompleted字段的问题

问题解决:Kotlin序列化时isCompleted字段缺失

问题重现

使用Kotlin序列化库的encodeToString()方法序列化TripInfo实例时,isCompleted字段未出现在JSON结果中:

  • 待序列化实例:
TripInfo(tripId=73, chunkSize=10485760, isCompleted=0)
  • 序列化后JSON:
{"tripId":73,"chunkSize":10485760}
  • 数据模型定义:
import kotlinx.serialization.Serializable

@Serializable
data class TripInfo(
    val tripId: Long? = null,
    val chunkSize: Long = 0,
    val isCompleted: Int = 0,
)

原因分析

Kotlin序列化库默认不会序列化值等于默认值的属性。这里isCompleted的默认值是0,而实例中该字段的值也是0,所以被自动忽略了。

解决方案

有两种方式可以解决这个问题:

方案1:全局开启默认值序列化

在调用encodeToString()时,配置Json实例开启encodeDefaults:

val json = Json { encodeDefaults = true }
val serializedString = json.encodeToString(tripInfo)

这样所有等于默认值的属性都会被序列化到JSON中。

方案2:单独指定字段强制序列化

如果只想让isCompleted字段强制序列化,不管是否等于默认值,可以给该字段添加@EncodeDefault注解:

import kotlinx.serialization.Serializable
import kotlinx.serialization.EncodeDefault

@Serializable
data class TripInfo(
    val tripId: Long? = null,
    val chunkSize: Long = 0,
    @EncodeDefault val isCompleted: Int = 0,
)

这样即使isCompleted的值等于默认值0,也会被包含在序列化结果里。

内容的提问来源于stack exchange,提问作者Saeed Noshadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:01:05