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

Kotlin中MutableList<T>未被序列化问题求助

解决方案

无需编写自定义序列化器,通过以下步骤即可解决问题:

1. 启用默认值序列化

Kotlinx Serialization 默认不会序列化值等于默认值的属性,这是空replies列表未被输出的核心原因。只需在@Serializable注解中添加encodeDefaults = true,强制序列化所有属性(包括默认值):

import kotlinx.serialization.Serializable

@Serializable(encodeDefaults = true)
data class Message(
    val content: String,
    val replies: MutableList<Message> = mutableListOf()
)

2. 确认注解与依赖配置

  • 务必使用kotlinx.serialization的@Serializable注解,不要混淆成Java的java.io.Serializable,二者序列化逻辑完全不同。
  • 检查项目构建文件是否正确引入Kotlinx Serialization插件和依赖:
    以Gradle Kotlin DSL为例:
    plugins {
        kotlin("jvm") version "1.9.20"
        kotlin("plugin.serialization") version "1.9.20"
    }
    
    dependencies {
        implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
    }
    

3. 验证效果

配置完成后,空的replies列表会被序列化为[],带回复的嵌套结构也能正常输出:

import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

fun main() {
    // 空回复的消息
    val emptyReplyMsg = Message("Hello")
    println(Json.encodeToString(emptyReplyMsg)) 
    // 输出: {"content":"Hello","replies":[]}

    // 带回复的消息
    val reply = Message("Nice to meet you")
    val withReplyMsg = Message("Hi", mutableListOf(reply))
    println(Json.encodeToString(withReplyMsg))
    // 输出: {"content":"Hi","replies":[{"content":"Nice to meet you","replies":[]}]}
}

Kotlinx Serialization原生支持MutableList等集合类型,也兼容递归嵌套的序列化场景,不需要像Java那样把列表包装在单独的可序列化类中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:30:59