使用Ktor开发Android时JSON序列化引用异常求助
问题:Android中Ktor JSON序列化引用未解析
环境信息
- Android Studio Iguana 2023.2.1 Patch 1
- Kotlin版本:232-1.9.0
- Ktor版本:2.3.9
:app模块依赖(build.gradle.kts)
implementation("io.ktor:ktor-client-core:2.3.9") implementation("io.ktor:ktor-client-android:2.3.9") implementation("io.ktor:ktor-client-serialization:2.3.9") implementation("io.ktor:ktor-client-logging:2.3.9") implementation("ch.qos.logback:logback-classic1.2.3") // 注意:此处存在拼写错误 implementation("io.ktor:ktor-server-content-negotiation:2.3.9") implementation("io.ktor:ktor-client-apache:2.3.9") implementation("io.ktor:ktor-client-content-negotiation:2.3.9") implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.9") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:2.3.9") implementation("io.ktor:ktor-server-default-headers:2.3.9")
项目根插件配置(build.gradle.kts)
plugins { alias(libs.plugins.androidApplication) apply false alias(libs.plugins.jetbrainsKotlinAndroid) apply false id("io.ktor.plugin") version "2.3.9" kotlin("plugin.serialization") version "1.9.22" kotlin("jvm") version "1.9.22" }
导入语句
import io.ktor.client.* import io.ktor.client.call.* import io.ktor.client.engine.android.Android import io.ktor.client.plugins.contentnegotiation.* import io.ktor.client.request.* import io.ktor.client.statement.* import io.ktor.http.* import io.ktor.http.ContentType.Application.Json import io.ktor.serialization.kotlinx.json.* import io.ktor.server.application.* import kotlinx.coroutines.* import kotlinx.serialization.* import kotlinx.serialization.Serializable
报错代码及错误信息
runBlocking { val client = HttpClient(Android) { install(ContentNegotiation) { json(Json { // 此处报错 prettyPrint = true isLenient = true }) } } }
错误提示:Cannot access class 'kotlinx.serialization.json.Json',Json为未解析引用。
解决方案
1. 修正依赖拼写错误
将ch.qos.logback:logback-classic1.2.3改为ch.qos.logback:logback-classic:1.2.3(版本号前缺少冒号)。
2. 调整插件应用范围
根项目插件块仅声明插件模板,将序列化插件移至:app模块应用:
- 根项目
build.gradle.kts修改为:
plugins { alias(libs.plugins.androidApplication) apply false alias(libs.plugins.jetbrainsKotlinAndroid) apply false id("io.ktor.plugin") version "2.3.9" apply false }
:app模块build.gradle.kts添加插件:
plugins { alias(libs.plugins.androidApplication) alias(libs.plugins.jetbrainsKotlinAndroid) kotlin("plugin.serialization") version "1.9.22" }
3. 补全缺失的导入
添加kotlinx.serialization.json.Json的导入语句:
import kotlinx.serialization.json.Json
4. 统一Kotlin版本
Ktor 2.3.9适配Kotlin 1.9.22,当前使用的1.9.0版本存在版本不匹配风险,建议在gradle/libs.versions.toml中统一配置Kotlin版本为1.9.22,确保所有模块依赖一致。
5. 同步并重建项目
执行File -> Sync Project with Gradle Files,再依次执行Build -> Clean Project和Build -> Rebuild Project。
替代JSON解析方案
如果上述修复无效,可切换以下Ktor支持的序列化方案:
Gson
添加依赖:
implementation("io.ktor:ktor-serialization-gson:2.3.9")
配置使用:
install(ContentNegotiation) { gson { setPrettyPrinting() serializeNulls() } }
Moshi
添加依赖:
implementation("io.ktor:ktor-serialization-moshi:2.3.9")
配置使用:
install(ContentNegotiation) { moshi { // 可添加自定义适配器等配置 } }
内容的提问来源于stack exchange,提问作者Jake Ramirez
相关产品推荐
相关产品推荐

