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

Jetpack Compose中JSON反序列化失效:@Serializable注解未生效问题

解决Jetpack Compose中Kotlinx Serialization注解未生效的问题

你遇到的问题和IDE无关,Android Studio完全支持Kotlinx Serialization,核心原因是只添加了序列化库的依赖,但没有配置对应的编译器插件——@Serializable注解需要这个插件生成底层的序列化/反序列化代码,否则注解不会被处理,就会出现你看到的警告。

下面分两种Gradle配置场景给出解决步骤:

一、新版Gradle(使用libs.versions.toml的项目)

  1. 确保settings.gradle.kts中已配置插件仓库:
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
  1. 在项目根目录的libs.versions.toml中添加序列化插件的版本配置:
[versions]
kotlin = "1.9.20" # 请和你项目使用的Kotlin版本保持一致
kotlinx-serialization = "1.6.0" # 与Kotlin版本匹配的序列化版本

[plugins]
kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlinx-serialization" }
  1. 在模块的build.gradle.kts中应用序列化插件:
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlinx-serialization") // 新增这一行
}

二、旧版Gradle(传统build.gradle配置)

  1. 在项目根目录的build.gradle中添加插件依赖:
buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-serialization:1.9.20" // 版本与你的Kotlin版本一致
    }
}
  1. 在模块的build.gradle中应用序列化插件:
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlinx-serialization' // 新增这一行
}

额外优化建议

  1. 目前新版Kotlinx Serialization已经将Json.decodeFromString标记为稳定API,你可以移除代码中的@ExperimentalSerializationApi注解,简化代码。
  2. 给JSON字符串加上trimIndent()方法,避免多余的换行和空格可能导致的解析问题:
@Composable
fun DecodedText() {
    val jsonString = """
    {
        "id": 722549,
        "name": "John Smith"
    }
    """.trimIndent()
    val deserialized = Json.decodeFromString<User>(jsonString)
    Text(
        text = "${deserialized.name}, ${deserialized.id}"
    )
}

完成配置后,点击Android Studio右上角的"Sync Now"同步项目,警告就会消失,代码也能正常运行了。

内容的提问来源于stack exchange,提问作者dàhóngpáo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:44:52