gpt4 book ai didi

json - 如何将 @kotlinx.serialization.Serializable 与 java.time.Instant 一起使用?

转载 作者:行者123 更新时间:2023-12-05 08:35:52 25 4
gpt4 key购买 nike

我正在学习如何使用 Ktor 的 HttpClient。而且,我希望它能自动将 JSON 响应转换为数据类。我想我的所有设置都是正确的(粘贴在下面),但不幸的是,java.time.Instant 使用了 import java.io.Serializable;,我想这不是与 kotlinx 的 @kotlinx.serialization.Serializable 兼容。

那么,我怎样才能让 Ktor 将 Instant 识别为可序列化的呢?

val httpClient = HttpClient(CIO) {
install(JsonFeature) {
serializer = KotlinxSerializer(Json {
prettyPrint = true
isLenient = true
})
}
}
val response: MyResponse = httpClient.get(baseUrl() + "/example/path") {
contentType(ContentType.Application.Json)
}

@kotlinx.serialization.Serializable
data class MyResponse(
val name: String,
val time: Instant // ERROR: "Serializer has not been found for type 'Instant'. To use context serializer as fallback, explicitly annotate type or property with @Contextual"
)

旁注:使用 Gson 或 Jackson 或其他序列化器的其他答案也可能有用,因为它们可能不必显式添加 @Serializable

最佳答案

一种解决方案是使用 kotlinx-datetime 库 ( https://github.com/Kotlin/kotlinx-datetime ),它为您提供了带有 @kotlinx.serialization.Serializable 的 Instant 的 Kotlin 版本您正在寻找的。

所以,不用 java.time.Instant , 你可以使用 kotlinx.datetime.Instant在 MyResponse 中。

Note that the library is experimental, and the API is subject to change.(Source: https://github.com/Kotlin/kotlinx-datetime#using-in-your-projects)

关于json - 如何将 @kotlinx.serialization.Serializable 与 java.time.Instant 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71629874/

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