xref: /aosp_15_r20/external/kotlinx.serialization/guide/example/example-poly-19.kt (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
1 // This file was automatically generated from polymorphism.md by Knit tool. Do not edit.
2 package example.examplePoly19
3 
4 import kotlinx.serialization.*
5 import kotlinx.serialization.json.*
6 
7 import kotlinx.serialization.modules.*
8 
9 @Serializable
10 abstract class Project {
11     abstract val name: String
12 }
13 
14 @Serializable
15 data class BasicProject(override val name: String, val type: String): Project()
16 
17 @Serializable
18 @SerialName("OwnedProject")
19 data class OwnedProject(override val name: String, val owner: String) : Project()
20 
<lambda>null21 val module = SerializersModule {
22     polymorphic(Project::class) {
23         subclass(OwnedProject::class)
24         defaultDeserializer { BasicProject.serializer() }
25     }
26 }
27 
<lambda>null28 val format = Json { serializersModule = module }
29 
mainnull30 fun main() {
31     println(format.decodeFromString<List<Project>>("""
32         [
33             {"type":"unknown","name":"example"},
34             {"type":"OwnedProject","name":"kotlinx.serialization","owner":"kotlin"}
35         ]
36     """))
37 }
38