Here’s an example: ```import kotlinx.serialization...
# serialization
a
Here’s an example:
Copy code
import kotlinx.serialization.PolymorphicSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonClassDiscriminator
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import kotlinx.serialization.modules.subclass

@Serializable
@JsonClassDiscriminator("__type")
sealed class Foo

@Serializable
@SerialName("bar")
class Bar : Foo()

fun main() {
    val json = Json {
        serializersModule = SerializersModule {
            polymorphic(Foo::class) {
                subclass(Bar::class)
            }
        }
    }
    // working
    json.decodeFromString(Foo.serializer(), "{\"__type\":\"bar\"}").also { print(it) }
    // not working
    val deserializer = PolymorphicSerializer(Foo::class)
    json.decodeFromString(deserializer, "{\"__type\":\"bar\"}").also { print(it) }
}
It’s not specific to interfaces, it just happens with interfaces as the base type isn’t
@Serializable
(as above it only works with the generated
.serializer()
on the base type)