如何禁用 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 序列化多态鉴别器?的主要内容,如果未能解决你的问题,请参考以下文章
在 Kotlin/Native 中使用 kotlinx.serialization 进行多态反序列化