https://kotlinlang.org logo
Title
r

ruwinmike

08/24/2021, 4:22 PM
Вопрос по сериализации sealed классов. Такой пример работает
private fun test() {
        val string = """{ "type": "a", "value": "Hello"}"""
        val result = Json.decodeFromString(Test.serializer(), string)
        println(">>> result $result")
    }

    @Serializable
    sealed class Test {
        abstract val type: String

        @SerialName("a")
        @Serializable
        data class A(
            override val type: String,
            val value: String
        ) : Test()
    }
но можно переопределить type на другое значение? Пытаюсь вот так вот
private fun test() {
        val string = """{ "fieldType": "a", "value": "Hello"}"""
        val result = Json.decodeFromString(Test.serializer(), string)
        println(">>> result $result")
    }

    @Serializable
    sealed class Test {
        @SerialName("fieldType")
        abstract val type: String

        @SerialName("a")
        @Serializable
        data class A(
            override val type: String,
            val value: String
        ) : Test()
    }
Но получаю ошибку
Polymorphic serializer was not found for missing class discriminator ('null')
Нашел решение
private val json = Json {
        classDiscriminator = "fieldType"
    }