我正在尝试在多平台项目中与Ktor进行Get call 。这是代码:

private val client = HttpClient()

fun myCall(callback: (List<Film>) -> Unit) {

    viewModelScope.launch {
        val result:List<Film> = client.get {
            url("https://data.sfgov.org/resource/wwmu-gmzc.json")
        }
        callback(result)
    }
}
每次我发出此请求时,应用程序都会关闭,并且我不会收到任何消息来告诉我发生了什么。如果我没有将电影列表作为结果类型,而是将字符串放在列表中,那么它可以工作并且收到电影列表,但是我想将其解析为自己的对象,因此无法执行。
通话有问题吗?

最佳答案

对于将反序列化到自定义对象 Ktor http客户端,您需要在创建http客户端时安装JsonFeature,这需要添加io.ktor:ktor-client-json依赖性。

val client = HttpClient {
   install(JsonFeature)
}
然后,根据要使用的序列化程序(Ktor支持 Gson Jackson Kotlinx.Serialization ),您需要添加相应序列化程序的依赖项。例如,如果要使用Gson,则需要为io.ktor:ktor-client-gson添加依赖项。然后,您的API响应将反序列化到List<Film>对象。
val result: List<Film> = client.get {
   url("https://data.sfgov.org/resource/wwmu-gmzc.json")
}
Ktor documentation中的上述更多内容

10-06 13:12