import kotlinx.serialization.* import kotlinx.serialization.json.* import kotlinx.serialization.modules.SerializersModule import kotlinx.serialization.modules.polymorphic interface Test { val prop1 : String val prop2 : String } @Serializable data class TestImpl( override val prop1 : String, override val prop2 : String ) : Test fun main() { val encoder = Json { serializersModule = SerializersModule { polymorphic(Test::class) { subclass(TestImpl::class, TestImpl.serializer()) default { TestImpl.serializer() } } } } val data : Test = TestImpl("blah", "blah") println(encoder.encodeToString(data)) }