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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:42:34