Jetpack Compose中JSON反序列化失效:@Serializable注解未生效问题
解决Jetpack Compose中Kotlinx Serialization注解未生效的问题
你遇到的问题和IDE无关,Android Studio完全支持Kotlinx Serialization,核心原因是只添加了序列化库的依赖,但没有配置对应的编译器插件——@Serializable注解需要这个插件生成底层的序列化/反序列化代码,否则注解不会被处理,就会出现你看到的警告。
下面分两种Gradle配置场景给出解决步骤:
一、新版Gradle(使用libs.versions.toml的项目)
- 确保settings.gradle.kts中已配置插件仓库:
pluginManagement { repositories { google() mavenCentral() gradlePluginPortal() } }
- 在项目根目录的
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" }
- 在模块的
build.gradle.kts中应用序列化插件:
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlinx-serialization") // 新增这一行 }
二、旧版Gradle(传统build.gradle配置)
- 在项目根目录的
build.gradle中添加插件依赖:
buildscript { dependencies { classpath "org.jetbrains.kotlin:kotlin-serialization:1.9.20" // 版本与你的Kotlin版本一致 } }
- 在模块的
build.gradle中应用序列化插件:
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlinx-serialization' // 新增这一行 }
额外优化建议
- 目前新版Kotlinx Serialization已经将
Json.decodeFromString标记为稳定API,你可以移除代码中的@ExperimentalSerializationApi注解,简化代码。 - 给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
相关产品推荐
相关产品推荐

