如何禁用 kotlinx 序列化多态鉴别器?

Posted

技术标签:

【中文标题】如何禁用 kotlinx 序列化多态鉴别器?【英文标题】:How to disable kotlinx serialization polymorphic descriminator? 【发布时间】:2020-09-15 02:49:21 【问题描述】:

我正在为许多第三方 API 生成 JSON。它们中的许多都接受不同对象的列表(JSON 数组),但是,由于列表的多态性,它们都不会接受由 kotlinx 序列化自动生成的"type": "com.mycom.someclass"

在我的用例中,我只关心序列化。不需要反序列化。

当前:

["type":"com.mycom.Child1","x":"child1", "type":"com.mycom.Child2","y": 23]

需要:

["x":"child1", "y": 23]

如何禁用此自动行为?

【问题讨论】:

没有简单的方法可以做到这一点。见this issue 【参考方案1】:

看看Json parametric polymorphic deserialization:

您也可以使用此类序列化程序序列化数据。在这种情况下,将为运行时的实际属性类型选择已注册或默认的序列化程序。 不会添加类别鉴别器。

您需要 impelement JsonParametricSerializer 并手动选择序列化程序。由于您不需要支持反序列化,因此实现将是微不足道的。

【讨论】:

我认为这种方法不适用于嵌套的密封层次结构。也就是说,JsonParametricSerializer 只能在类层次结构的顶层使用。

以上是关于如何禁用 kotlinx 序列化多态鉴别器?的主要内容,如果未能解决你的问题,请参考以下文章

具有多态 kotlinx 序列化的自定义序列化程序

在 Kotlin/Native 中使用 kotlinx.serialization 进行多态反序列化

使用外部 kotlinx 序列化器序列化列表

Kotlin - 无法序列化多态类。未找到序列化程序

@SerialInfo - 如何使用 Kotlinx 序列化管理用户定义的串行注释?

如何使用 kotlinx 序列化将值数组反序列化为集合