Android使用Ktor发起HTTP请求时遭遇序列化器缺失错误求助
解决Ktor序列化错误:Serializer for class ... is not found
1. 统一Kotlin与序列化插件版本
序列化插件版本必须和org.jetbrains.kotlin.android插件版本完全一致,版本不匹配会导致插件兼容性问题。修改模块级build.gradle的插件配置:
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") version "1.8.20" // 替换为项目实际使用的Kotlin版本 kotlin("plugin.serialization") version "1.8.20" // 与上方Kotlin版本保持一致 }
2. 移除不必要的服务端依赖
你的依赖中包含Ktor服务端相关库(ktor-server-*),Android客户端应用不需要这些依赖,删除后可避免潜在冲突:
// 移除以下两行服务端依赖 implementation("io.ktor:ktor-server-call-logging-jvm:$ktorVersion") implementation("io.ktor:ktor-server-core-jvm:$ktorVersion")
保留客户端必需的依赖:
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion") implementation("io.ktor:ktor-client-cio:$ktorVersion") implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
3. 确保嵌套模型类也被序列化
错误提示的未找到序列化器的类大概率是Genre——你的GenreDto已标注@Serializable,但它引用的Genre类缺少序列化注解。给Genre类添加@Serializable:
@Serializable data class Genre( // 根据实际接口字段定义,例如: val id: Int, val name: String )
4. 验证Ktor版本兼容性
确保所有Ktor客户端依赖使用相同的$ktorVersion,且该版本与项目的Kotlin版本兼容(例如Ktor 2.3.0兼容Kotlin 1.8.x)。
额外优化:简化API调用代码
可以简化GET请求的写法,直接指定泛型类型:
val response: GenreDto = client.get("${BASE_URL}${GET_GENRE}")
完成以上修改后,清理并重新构建项目即可。
内容的提问来源于stack exchange,提问作者Furkan Ayaz
相关产品推荐
相关产品推荐

