gpt4 book ai didi

ios - 由于缺少反射,从 KClass 获取序列化程序在 native 上不可用

转载 作者:行者123 更新时间:2023-12-01 19:39:27 25 4
gpt4 key购买 nike

说明

我在 iOS 和 Android 的多平台库中使用 Kotlinx 序列化库来处理 HTTP 请求。但是当我在 iOS 上使用我的请求功能时出现此消息,有解决方法吗?我函数中的哪一行调用了未实现的函数?

kotlin.NotImplementedError: An operation is not implemented: 由于缺少反射,从 KClass 获取序列化程序在 native 上不可用。 .serializer() 直接在可序列化类上使用。

转载

这是我写的函数

@ImplicitReflectionSerializer
private suspend fun authenticationRequest(email: String, password: String): Either<ErrorMessage, Authentication> {
return try {
val response: Authentication = client.post {
url("${Constants.API_URL}/security/login")
body = jsonSerializer.write(LoginType(email, password))
}
Either.Right(response)
} catch (e: ResponseException) {
val message = Json.parse<ErrorMessage>(e.response.content.readUTF8Line() ?: "").apply {
codeHttp = e.response.status.value
reason = e.response.status.description
}
Either.Left(message)
}
}

环境
  • Kotlin 版本:1.3.31
  • Kotlinx 序列化版本:0.11.0
  • Kotlin 平台:iOS 和 Android
  • Gradle 版本:5.1.1
  • 最佳答案

    我自己解决了这个问题。为了使它工作,我必须在初始化 KotlinxSerializer 时使用 setMapper

    val serialiser = KotlinxSerializer(Json.nonstrict).apply {
    setMapper(Foo::class, Foo.serializer())
    }

    当我调用 Json.parse() 时,这个函数的另一个签名很有用
    Json.parse(ErrorMessage.serializer(), e.response.content.readUTF8Line() ?: "")

    关于ios - 由于缺少反射,从 KClass 获取序列化程序在 native 上不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56496496/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com