问题描述
我想为一个名为 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 (将#修改为@)