Android Studio 未看到 Ktor 序列化程序(未找到“用户”类的序列化程序。)

Posted

技术标签:

【中文标题】Android Studio 未看到 Ktor 序列化程序(未找到“用户”类的序列化程序。)【英文标题】:Ktor Serializer isn't seen by Android Studio (Serializer for class 'User' is not found.) 【发布时间】:2021-07-30 10:09:53 【问题描述】:

我正在尝试在我的项目中使用 Ktor。我按照文档中的说明制作了所有内容,但它不起作用

依赖关系:

implementation "io.ktor:ktor-client-core:1.5.4"
implementation "io.ktor:ktor-client-android:1.5.4"
implementation "io.ktor:ktor-client-serialization-jvm:1.5.4"

HTTPClient 和请求:

val client = HttpClient 
    install(JsonFeature)
        serializer = KotlinxSerializer()
    
    defaultRequest 
        url 
            protocol = URLProtocol.HTTPS
            host = "testtesttest.zapto.org"
        
    


suspend fun getUsersList() = client.get<User>
    url("/users/list")

用户类别:

import com.kepler88d.icthack2app.model.enumerations.UserSpecialization
import kotlinx.serialization.Serializable

@Serializable
data class User(
    val id: Int,
    val password: String,
    val rating: Float,
    val specialization: UserSpecialization,
    val firstName: String,
    val lastName: String,
    val profileDescription: String,
    val githubProfileLink: String,
    val projectIdList: MutableList<Int>,
    val replyIdList: MutableList<Int>,
    val tgId: String,
)

UserSpecialization 类:

import kotlinx.serialization.Serializable

@Serializable
enum class UserSpecialization 
    ios_DEVELOPER, ANDROID_DEVELOPER, WEB_BACKEND_DEVELOPER, WEB_FRONTEND_DEVELOPER

当我尝试将 JSON 反序列化为对象时,它会因以下错误而崩溃:

kotlinx.serialization.SerializationException: Serializer for class 'User' is not found.
Mark the class as @Serializable or provide the serializer explicitly.

奇怪的是,枚举类 Android Studio 认为是可序列化的,但数据类不是

enum class data class

【问题讨论】:

【参考方案1】:

解决方案是添加插件

id 'kotlinx-serialization'

【讨论】:

【参考方案2】:

我为 Android 做了这个,但它也可能适用于 ktor。首先,将此行添加到构建项目 gradle 中的 dependencies 中:

classpath "org.jetbrains.kotlin:kotlin-serialization:1.5.21"

将这些也添加到构建应用程序 gradle:

plugins 
    ...
    id 'kotlinx-serialization'

dependencies 
    ...
    implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2'

请注意版本号可能不同。

【讨论】:

以上是关于Android Studio 未看到 Ktor 序列化程序(未找到“用户”类的序列化程序。)的主要内容,如果未能解决你的问题,请参考以下文章

无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块

Ktor 客户端的 JsonFeature 未解决

构建 iOS 框架时未找到 Ktor 和 kotlinx 依赖项

Android Studio 3.0 Kotlin 更改未反映在构建中

Ktor 应用程序未在使用 IntelliJ IDEA 的 Kotlin 多平台项目中运行

未找到 Visual Studio 2022 Android 设备