Hey folks, I am trying a custom serialiser of seal...
# serialization
v
Hey folks, I am trying a custom serialiser of sealed class for this particular issue https://github.com/Kotlin/kotlinx.serialization/issues/546 I am trying to use the default generated serialiser for the sealed class in my custom serialiser, and register the custom serialiser in serialModule and add it in json context. But the custom serialiser doesn't get triggered at all. Any ideas about it? This is for multiplatform library
Copy code
@InternalSerializationApi
class CustomDiscriminatorSerializer<T : Any>(
    private val sealedClassSerializer: SealedClassSerializer<T>,
    private val classDiscriminator: String
) : KSerializer<T> {
    override val descriptor: SerialDescriptor
        get() = sealedClassSerializer.descriptor

    override fun deserialize(decoder: Decoder): T {
        val jsonInput = decoder as JsonInput
        val jsonTree = jsonInput.decodeJson() as JsonObject
        val jsonElement = jsonTree[classDiscriminator]!!
        val type = jsonElement.content
        (jsonTree.content as MutableMap).remove(classDiscriminator)
        @Suppress("UNCHECKED_CAST")
        val actualSerializer = sealedClassSerializer.findPolymorphicSerializer(decoder, type) as KSerializer<T>
        return jsonInput.json.fromJson(actualSerializer, jsonTree)
    }

    override fun serialize(encoder: Encoder, obj: T) {
        sealedClassSerializer.serialize(encoder, obj)
    }
}
and in use it like this
Copy code
val serialModule = serializersModuleOf(
            mapOf(
                JsonText::class to CustomDiscriminatorSerializer(JsonText.serializer() as SealedClassSerializer<JsonText>, "data_type"),
                JsonItem::class to CustomDiscriminatorSerializer(JsonItem.serializer() as SealedClassSerializer<JsonItem>, "layout")
            )
        )
val json = Json(
            configuration = JsonConfiguration.Default.copy(strictMode = false),
            context = serialModule
        )
 json.parse(JsonItemBenefitsWrapper.serializer(), string)