Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kotlinx序列化的ktor:如何使用JSON.nonstrict_Kotlin_Ktor_Kotlinx.serialization - Fatal编程技术网

kotlinx序列化的ktor:如何使用JSON.nonstrict

kotlinx序列化的ktor:如何使用JSON.nonstrict,kotlin,ktor,kotlinx.serialization,Kotlin,Ktor,Kotlinx.serialization,我正在尝试初始化Ktor http客户端并设置json序列化。我需要允许对象允许的非严格反序列化。只是不知道如何将此设置应用于序列化程序 val client = HttpClient { install(JsonFeature) { serializer = KotlinxSerializer() } } val client =

我正在尝试初始化Ktor http客户端并设置json序列化。我需要允许对象允许的非严格反序列化。只是不知道如何将此设置应用于序列化程序

 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