Rod*_*ler 10 kotlin ktor kotlinx.serialization
我正在尝试初始化 Ktor http 客户端并设置 json 序列化。我需要允许JSON.nonstrict对象允许的非严格反序列化。只是无法了解如何将此设置应用于序列化程序。
val client = HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer()
}
}
Run Code Online (Sandbox Code Playgroud)
Dr.*_*cky 14
Kotlin 1.4.0发布后:
使用它来将字符串转换为对象:
val response = Json {
ignoreUnknownKeys = true
}.decodeFromString(ResponseObject.serializer(), jsonString)
Run Code Online (Sandbox Code Playgroud)
对于您的 httpClient 使用:
HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer()
}
install(Logging) {
logger = Logger.DEFAULT
level = LogLevel.ALL
}
}
Run Code Online (Sandbox Code Playgroud)
Rod*_*ler 10
想通了 - 我们可以传入构造函数:
serializer = KotlinxSerializer(Json.nonstrict)
Run Code Online (Sandbox Code Playgroud)
您可以使用传递到 KotlinxSerializer 的 Json 构建器指定 json 配置。
val client = HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer(Json {
isLenient = true
ignoreUnknownKeys = true
})
}
}
Run Code Online (Sandbox Code Playgroud)
Json 构建器的确切字段是实验性的,可能会发生变化,因此请在此处查看源代码。
这种变化经常发生,但是在 Kotlin 1.4.10 和 Ktor 1.4.1 中你需要传递一个kotlinx Json(小心,因为还有一个io.ktor.client.features.json.Json,我使用了一个导入别名来区分它们,因为我需要两者import kotlinx.serialization.json.Json as KotlinJson)
val client = HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer(KotlinJson { ignoreUnknownKeys = true })
}
...
Run Code Online (Sandbox Code Playgroud)
对于那些使用改造的人,您可能需要考虑JsonConfiguration(strictMode = false)在改造构建器上使用。
例如:
// your retrofit builder
Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.client(httpClient)
.addConverterFactory(
Json(JsonConfiguration(strictMode = false))
.asConverterFactory(MediaType.get("application/json")
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6910 次 |
| 最近记录: |