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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:34:50