kotlin - 密封接口的序列化器 (kotlinx.serialization)
问题描述
我正在尝试序列化实现两个密封接口的基类。我尝试了多种方法,但我总是得到错误:
引起:kotlinx.serialization.SerializationException:类“PayloadFromBuilder”未在“Payload”范围内注册多态序列化。将基类标记为“密封”或显式注册序列化程序。
我主要关注本指南Kotlinx/polymorphism并在此处检查了一些类似的问题。
我的代码:
sealed inteface MyClass {
dataetc
}
@Serializable
private class DefaultMyClass(dataetc): MyClass
fun MyClass(dataetc): MyClass = DefaultMyClass
Sealed interface MyClassBuilder {
fun dataetc(value: ByteArray)
fun dataetc(value: ByteArray)
fun dataetc(value: ByteArray?)
}
@PublishedApi
@Serializable
@SerialName("payload")
internal class MyClassFromBuilder: MyClassBuilder, MyClass {
}
//Serialization
val module = SerializersModule {
polymorphic(MyClass::class) {
subclass(MyClassFromBuilder::class, MyClassFromBuilder.serializer())
default { MyClassFromBuilder.serializer() }
}
polymorphic(MyClassBuilder::class) {
subclass(MyClassFromBuilder::class, MyClassFromBuilder.serializer())
default { MyClassFromBuilder.serializer() }
}
}
val ConfiguredProtoBuf = ProtoBuf { serializersModule = module }
@ExperimentalSerializationApi
internal inline fun <reified T> ProtoBuf.encodeToMessage(value: T): Message =
Message(encodeToByteArray(value))
从我所看到的情况来看,我认为我非常接近解决方案,但我缺少一些东西,因为我的示例非常通用,如果您需要更多信息,请告诉我,提前谢谢您。
注意:在我的几次尝试中,我尝试用 @Polymorphic 注释两个密封的接口,但我不确定它是否改变了任何东西。
注意 2:当我调用 encodeToMessage 时,我的代码会中断
解决方案
所以我搞砸了很长时间,结果当我调用我的 encodeToMessage 时我没有使用我的 ConfiguredProtoBuf
推荐阅读
- c++ - 静态库的c ++链接器错误
- c# - .NET Core 2.1(不是 Web API) - windows 服务 - 没有外部工具/库
- vb.net - vb.net如何在下拉关闭事件后覆盖组合框中的文本
- powershell - Powershell DSC - 将文件解压缩到远程目标
- android - 以编程方式缩放相机
- javascript - 在移动视图的滑块中转换两列布局
- angularjs - 导出大量数据的最佳方式
- microsoft-graph-api - 微软图形 API
- javascript - 我想使用 fetch API 方法来初始化商店的状态,但为什么它不起作用?
- javascript - Passport JS successRedirect 在 Node.js 中挂起