// This file was automatically generated from polymorphism.md by Knit tool. Do not edit. package example.examplePoly17 import kotlinx.serialization.* import kotlinx.serialization.json.* import kotlinx.serialization.modules.* @Serializable abstract class Response @Serializable @SerialName("OkResponse") data class OkResponse(val data: T) : Response() val responseModule = SerializersModule { polymorphic(Response::class) { subclass(OkResponse.serializer(PolymorphicSerializer(Any::class))) } } val projectModule = SerializersModule { fun PolymorphicModuleBuilder.registerProjectSubclasses() { subclass(OwnedProject::class) } polymorphic(Any::class) { registerProjectSubclasses() } polymorphic(Project::class) { registerProjectSubclasses() } } @Serializable abstract class Project { abstract val name: String } @Serializable @SerialName("OwnedProject") data class OwnedProject(override val name: String, val owner: String) : Project() val format = Json { serializersModule = projectModule + responseModule } fun main() { // both Response and Project are abstract and their concrete subtypes are being serialized val data: Response = OkResponse(OwnedProject("kotlinx.serialization", "kotlin")) val string = format.encodeToString(data) println(string) println(format.decodeFromString>(string)) }