如何解决在 kotlin 序列化中为多态递归类创建自定义序列化程序
我想为一个名为 MapNode 的类编写一个自定义序列化程序,该类包含两个自身列表和一些其他属性
abstract class MapNode {
var colorIndex : Int = 0
var left = listof<MapNode>()
var right = listof<MapNode>()
}
TextNode 是继承 MapNode 的
class TextNode : MapNode{
var text : String = ""
}
这些属性都是委托的,这就是为什么我需要为它们编写自定义序列化程序作为解决方法,因为委托的属性没有被默认序列化
我是否应该为 TextNode 编写一个序列化程序并在这个序列化程序中序列化和反序列化 MapNode 的所有属性,但如果我这样做,那么每次我编写一个扩展 MapNode 的类时,我都必须再次序列化和反序列化 MapNode 属性
>我不知道如何在序列化器内部获取MapNode序列化器并序列化自身的列表
我想出了这段代码,但它不完整,也没有解决问题,我希望得到一些见解
object MapNodeSerializer : KSerializer<MapNode> {
private val serializer = ListSerializer(this)
@OptIn(
ExperimentalSerializationApi::class,kotlinx.serialization.InternalSerializationApi::class
)
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("MapNode") {
element<Boolean>("is_group")
element<Int>("color_index")
element<List<MapNode>>("left")
element<List<MapNode>>("right")
}
override fun deserialize(decoder: Decoder): MapNode {
val node = TextNode() //how to get the subclass here
decoder.decodeBoolean()
decoder.decodeInt()
//how to decode the left list and right list
return node
}
override fun serialize(encoder: Encoder,value: MapNode) {
encoder.encodeStructure(descriptor = descriptor) {
encodeBooleanElement(descriptor = descriptor,value.isGroup)
encodeIntElement(descriptor = descriptor,1,value.colorIndex)
//How to encode the left list & right list
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。