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
相关产品推荐
相关产品推荐

