Waqas Tahir
08/04/2021, 6:56 AMabstract class MapNode {
// Node Properties
var isGroup by mutableStateOf(false)
var colorIndex by mutableStateOf(0)
// Node Children
@Serializable(with = SnapshotStateListSerializer::class)
var left = mutableStateListOf<MapNode>()
}
How can I write a Custom Serializer for this class ?? that serializes all these properties ! (including delegated properties)Dominaezzz
08/04/2021, 7:35 AMWaqas Tahir
08/04/2021, 7:35 AMWaqas Tahir
08/04/2021, 7:35 AMDominaezzz
08/04/2021, 7:36 AMdata class MapNode(val .....)
.Dominaezzz
08/04/2021, 7:36 AMWaqas Tahir
08/04/2021, 7:37 AMWaqas Tahir
08/04/2021, 7:37 AMWaqas Tahir
08/04/2021, 7:37 AMDominaezzz
08/04/2021, 7:37 AMDominaezzz
08/04/2021, 7:37 AMDominaezzz
08/04/2021, 7:38 AMDominaezzz
08/04/2021, 7:38 AMWaqas Tahir
08/04/2021, 7:39 AMWaqas Tahir
08/04/2021, 7:55 AM@SerialName("MapNode")
@Serializable
private class MapNodeSurrogate(
val isGroup: Boolean,
val colorIndex: Int,
val left: List<MapNodeSurrogate>,
val right: List<MapNodeSurrogate>
)
object MapNodeSerializer : KSerializer<MapNode> {
private val serializer = MapNodeSurrogate.serializer()
override val descriptor: SerialDescriptor = serializer.descriptor
private fun convertToSurrogate(node: MapNode): MapNodeSurrogate {
return MapNodeSurrogate(
node.isGroup,
node.colorIndex,
node.left.map { convertToSurrogate(it) },
node.right.map { convertToSurrogate(it) }
)
}
private fun convertToNode(surrogate: MapNodeSurrogate): MapNode {
return MapNode().apply {
}
}
override fun serialize(encoder: Encoder, value: MapNode) {
encoder.encodeSerializableValue(serializer, convertToSurrogate(value))
}
override fun deserialize(decoder: Decoder): MapNode {
return convertToNode(decoder.decodeSerializableValue(serializer))
}
}
Since map node is an abstract class , how can I make an instance , I don't know how to deal with polymorphism hereDominaezzz
08/04/2021, 7:56 AMDominaezzz
08/04/2021, 7:57 AMWaqas Tahir
08/04/2021, 7:57 AMDominaezzz
08/04/2021, 7:58 AMWaqas Tahir
08/04/2021, 7:58 AMDominaezzz
08/04/2021, 7:59 AMDominaezzz
08/04/2021, 7:59 AMif (surrogate is SubClassSurrogate) { return subclass }
Waqas Tahir
08/04/2021, 8:00 AMWaqas Tahir
08/04/2021, 8:11 AMMapNodeSurrogate.serializer()
still accessing the base class serializer and using it , won't subclass properties not get serialized ?Dominaezzz
08/04/2021, 8:12 AMWaqas Tahir
08/04/2021, 9:03 AM