Kotlin序列化报错:CustomConvertible未在Convertible范围内注册多态序列化
解决Kotlin多态序列化异常问题
问题核心是密封接口Convertible未标注@Serializable注解。尽管你将接口声明为sealed,但kotlinx.serialization要求多态序列化的基类(密封类/接口)必须显式添加@Serializable,才能让编译器自动生成多态序列化器并注册所有密封子类。
修改后的代码
@Serializable // 新增此注解 sealed interface Convertible { fun convertUserInput(value: String): String } @Serializable @SerialName("CustomConvertible") class CustomConvertible() : Convertible { override fun convertUserInput(value: String): String { return "" } } @Serializable class DTOAttribute(val convertibles: List<Convertible> = emptyList())
原理说明
对于密封类/接口的多态序列化,kotlinx.serialization的核心规则:
- 基类必须标记
@Serializable,这是触发多态序列化逻辑的必要条件 - 所有密封子类只要标记
@Serializable(可搭配@SerialName定义序列化后的标识),就会被编译器自动注册到基类的多态序列化器中,无需手动注册
你的原代码因基类缺少@Serializable,导致序列化框架无法识别这是需要处理多态的可序列化类型,因此抛出子类未注册的异常。
内容的提问来源于stack exchange,提问作者Remo
相关产品推荐
相关产品推荐

