gpt4 book ai didi

kotlin - IgnoreUnknownKeys 仅适用于 Kotlinx 和 Ktor 的一种类型

转载 作者:行者123 更新时间:2023-12-05 04:51:51 42 4
gpt4 key购买 nike

我在 Ktor 应用程序中使用 Kotlinx 序列化,并寻找 Jacksons @JsonIgnoreProperties(ignoreUnknown = true) 注释的等效项。我知道

install(ContentNegotiation) {
json(Json{ ignoreUnknownKeys = true })
}

我有很多注释类 @Serializable。有没有办法将 ignoreUnknownKeys 仅应用于一种类型类/类型,就像我可以对 Jackson 做的那样?

最佳答案

您可以使用以下技巧:

  1. 保留默认值 ignoreUnknownKeys false 的属性 ( Json )格式实例,你给 Ktor。
  2. 对于您希望以特殊方式处理的特定类,创建额外的自定义序列化程序,这将在幕后使用另一种格式实例。
  3. 将这些序列化程序连接到 Json格式实例,你给 Ktor。

为方便起见,你可以为KSerializer<T>定义如下扩展函数:

fun <T> KSerializer<T>.withJsonFormat(json: Json) : KSerializer<T> = object : KSerializer<T> by this {
override fun deserialize(decoder: Decoder): T {
// Cast to JSON-specific interface
val jsonInput = decoder as? JsonDecoder ?: error("Can be deserialized only by JSON")
// Read the whole content as JSON
val originalJson = jsonInput.decodeJsonElement().jsonObject
return json.decodeFromJsonElement(this@withJsonFormat, originalJson)
}
}

用法:

install(ContentNegotiation) {
json(Json {
serializersModule = SerializersModule {
contextual(MyDataClass.serializer().withJsonFormat(Json { ignoreUnknownKeys = true }))
}
})
}

关于kotlin - IgnoreUnknownKeys 仅适用于 Kotlinx 和 Ktor 的一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66742155/

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