首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密封接口序列化器(kotlinx.serialization)

密封接口序列化器(kotlinx.serialization)
EN

Stack Overflow用户
提问于 2021-09-13 08:04:10
回答 1查看 683关注 0票数 0

我正在尝试序列化正在实现两个密封接口的基类。我尝试过多种方法,但我总是遇到错误:

导致: kotlinx.serialization.SerializationException:类'PayloadFromBuilder‘没有注册多态序列化范围内的’有效载荷‘。将基类标记为“密封”或显式注册序列化程序。

我主要是遵循这个指南Kotlinx/多态性,并在这里检查了一些类似的问题。

我的代码:

代码语言:javascript
复制
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乐趣时,我的代码会中断

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-15 07:34:59

所以我搞砸了,结果我打电话给我的ConfiguredProtoBuf时没有使用我的encodeToMessage

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69159229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档