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

Kotlin多平台项目中kotlinx.serialization无法使用的问题求助

解决Kotlin JVM/JS多平台项目中kotlinx.serialization编码器未生成的问题

嘿,我来帮你搞定这个序列化的问题!从你的错误信息和配置来看,核心问题是生成的序列化代码没被IDE/构建工具识别到,咱们一步步来修复:

1. 先修正构造函数参数的小问题

首先看你的User类定义:

@Serializable data class User( val user: String )

但你调用的时候写了User(login = "X")——这里参数名不匹配哦,得改成User(user = "X"),这虽然不是报错的主因,但先修正避免后续混淆。

2. 调整生成代码的源目录配置

你在commonMain里指定了自定义的生成代码目录:

kotlin.srcDir("build/generated-src/common")

但kotlinx.serialization插件在Kotlin 1.4+版本里,默认把生成的序列化代码放在build/generated/source/kotlinxSerialization下,分common、backend、frontend各自的子目录。你指定的路径不对,导致IDE找不到那些自动生成的encodeToString扩展函数。

把commonMain里的这行改成:

kotlin.srcDir("build/generated/source/kotlinxSerialization/commonMain")

同时,frontendMain里的对应配置也要改:

kotlin.srcDir("build/generated/source/kotlinxSerialization/frontendMain")

如果backend也需要序列化支持,同样给backendMain加上对应的路径。

3. 确保序列化特性在所有源集启用

虽然你已经加了kotlinx-serialization插件,但可以显式在所有源集里启用序列化特性,避免遗漏:

kotlin {
    // ... 你的target配置 ...
    sourceSets {
        all {
            languageSettings.apply {
                enableLanguageFeature("Serialization")
            }
        }
        // ... 其他sourceSet配置 ...
    }
}

4. 清理缓存并重新构建

旧的构建缓存有时候会搞事情,执行以下操作彻底刷新:

  • 运行./gradlew clean清理构建目录
  • 运行./gradlew build重新构建项目
  • 重启你的IDE(比如IntelliJ),然后同步Gradle项目,确保IDE能识别到新生成的代码

5. 版本兼容性检查

你的Kotlin版本是1.4.20,kotlinx-serialization-json用的是1.0.1,这俩版本是兼容的(1.0.x系列对应Kotlin 1.4.x),这部分没问题,不用调整。

验证修复

做完上面的步骤后,再调用JSON.encodeToString(User(user = "X")),应该就能正常识别扩展函数了。如果还是有问题,可以去build/generated/source/kotlinxSerialization/commonMain目录下看看,有没有生成类似UserSerializer.kt的文件——如果有,说明代码生成成功,只是IDE还没同步,再重启下IDE就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:12:19