gpt4 book ai didi

json - Ktor:使用List作为多平台中的根目录来序列化/反序列化JSON

转载 作者:行者123 更新时间:2023-12-04 10:13:59 26 4
gpt4 key购买 nike

我们如何将kotlin.serialize与Ktor的HttpClient结合使用以反序列化/序列化以列表为根的JSON?我正在创建HttpClient,如下所示:

HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer().apply {
setMapper(MyClass::class, MyClass.serializer())
setMapper(AnotherClass::class, AnotherClass.serializer())
}
}
install(ExpectSuccess)
}

似乎我需要为List设置setMapper,但是使用泛型是不可能的。我看到我可以使用MyClass.serializer()。list获得它的序列化器,但是将其注册为对HTTP请求进行反序列化/序列化并不是一件容易的事。有人知道一个好的解决方案吗?

最佳答案

使用ktor 1.3.0更新:

现在,您可以直接从客户端接收默认集合(例如列表):

@Serializable
data class User(val id: Int)

val response: List<User> = client.get(...)
// or client.get<List<User>>(...)

在ktor 1.3.0之前:

还没有办法在kotlinx.serialization中对这样的JSON进行(反)序列化。

对于序列化,您可以尝试这样的操作:
fun serializer(data: Any) = if (data is List<*>) {
if (data is EmptyList) String::class.serializer().list // any class with serializer
else data.first()::class.serializer().list
} else data.serializer()

并且没有已知的方法来获取列表反序列化器。

关于json - Ktor:使用List作为多平台中的根目录来序列化/反序列化JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52971069/

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