kotlinx序列化的ktor:如何使用JSON.nonstrict
我正在尝试初始化Ktor http客户端并设置json序列化。我需要允许对象允许的非严格反序列化。只是不知道如何将此设置应用于序列化程序kotlinx序列化的ktor:如何使用JSON.nonstrict,kotlin,ktor,kotlinx.serialization,Kotlin,Ktor,Kotlinx.serialization,我正在尝试初始化Ktor http客户端并设置json序列化。我需要允许对象允许的非严格反序列化。只是不知道如何将此设置应用于序列化程序 val client = HttpClient { install(JsonFeature) { serializer = KotlinxSerializer() } } val client =
val client = HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer()
}
}
val client = HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer(Json {
isLenient = true
ignoreUnknownKeys = true
})
}
}
算出-我们可以传入构造函数:
serializer = KotlinxSerializer(Json.nonstrict)
<>对于使用改型的人,您可能需要考虑在改写生成器上使用<代码> JSONSOCTION(StuttMeave= false)< /> > 例如:
资料来源:根据罗迪恩·阿尔舒勒(Rodion Altshuler)的上述回答,这就是我在KMP项目中的工作:
install(JsonFeature) {
serializer = KotlinxSerializer(kotlinx.serialization.json.Json(JsonConfiguration.Stable.copy(strictMode = false))).apply {
useDefaultTransformers = true
}
}
可以使用json生成器指定json配置,并将其传递到KotlinxSerializer
val client = HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer()
}
}
val client = HttpClient {
install(JsonFeature) {
serializer = KotlinxSerializer(Json {
isLenient = true
ignoreUnknownKeys = true
})
}
}
Json builder的确切字段是实验性的,可能会更改,因此请查看Kotlin1.4.0发布后的:
val response=Json{
ignoreUnknownKeys=真
}
.decodeFromString(ResponseObject.serializer(),jsonString)
而您的httpClient:
HttpClient{
安装(JsonFeature){
serializer=KotlinxSerializer()
}
安装(日志记录){
logger=logger.DEFAULT
level=LogLevel.ALL
}
}
对于“1.0.0RC”版本,改装使用如下
Retrofit.Builder()
.client(okHttpClient)
.baseUrl(Env.BASE_URL)
.addConverterFactory(Json{
isLenient = true
ignoreUnknownKeys = true
}.asConverterFactory(MediaType.get("application/json")))
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.build()
这种更改非常频繁,但对于Kotlin 1.4.10和Ktor 1.4.1,您需要传递一个kotlinxJson(请小心,因为还有一个
io.Ktor.client.features.Json.Json
,我使用了一个导入别名来区分它们,因为我需要将kotlinx.serialization.Json.Json导入为KotlinJson)
以下是如何为Spring反应式Webclient配置JsonConfig:
val json = Json { ignoreUnknownKeys = true isLenient = true }
val strategies = ExchangeStrategies
.builder()
.codecs { clientDefaultCodecsConfigurer ->
run {
clientDefaultCodecsConfigurer.defaultCodecs()
.kotlinSerializationJsonDecoder(KotlinSerializationJsonDecoder(json))
clientDefaultCodecsConfigurer.defaultCodecs()
.kotlinSerializationJsonEncoder(KotlinSerializationJsonEncoder(json))
}
}.build()
return WebClient
.builder()
.exchangeStrategies(strategies)
.baseUrl(baseUrl!!)
.build()
似乎对于1.4.32,我有如下内容:
install(JsonFeature){
serializer=KotlinxSerializer(json=kotlinx.serialization.json.json{
Islenent=true
ignoreUnknownKeys=真
})
}
这是不推荐的。从我看到的情况来看,他们似乎每2天更改一次API