我正在尝试序列化正在实现两个密封接口的基类。我尝试过多种方法,但我总是遇到错误:
导致: kotlinx.serialization.SerializationException:类'PayloadFromBuilder‘没有注册多态序列化范围内的’有效载荷‘。将基类标记为“密封”或显式注册序列化程序。
我主要是遵循这个指南Kotlinx/多态性,并在这里检查了一些类似的问题。
我的代码:
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))据我所见,我认为我非常接近解决方案,但我遗漏了一些东西,因为我的例子是非常通用的,如果你需要更多的信息,让我知道,谢谢你提前。
注意:在我的几次尝试中,我试着用@多态对两个密封的整数进行注释,但是我不确定它是否改变了什么。
注2:当我调用encodeToMessage乐趣时,我的代码会中断
发布于 2021-09-15 07:34:59
所以我搞砸了,结果我打电话给我的ConfiguredProtoBuf时没有使用我的encodeToMessage
https://stackoverflow.com/questions/69159229
复制相似问题