xref: /aosp_15_r20/external/kotlinx.serialization/guide/example/example-json-26.kt (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
1 // This file was automatically generated from json.md by Knit tool. Do not edit.
2 package example.exampleJson26
3 
4 import kotlinx.serialization.*
5 import kotlinx.serialization.json.*
6 
7 import kotlinx.serialization.builtins.*
8 
9 @Serializable
10 abstract class Project {
11     abstract val name: String
12 }
13 
14 @Serializable
15 data class BasicProject(override val name: String): Project()
16 
17 
18 @Serializable
19 data class OwnedProject(override val name: String, val owner: String) : Project()
20 
21 object ProjectSerializer : JsonContentPolymorphicSerializer<Project>(Project::class) {
selectDeserializernull22     override fun selectDeserializer(element: JsonElement) = when {
23         "owner" in element.jsonObject -> OwnedProject.serializer()
24         else -> BasicProject.serializer()
25     }
26 }
27 
mainnull28 fun main() {
29     val data = listOf(
30         OwnedProject("kotlinx.serialization", "kotlin"),
31         BasicProject("example")
32     )
33     val string = Json.encodeToString(ListSerializer(ProjectSerializer), data)
34     println(string)
35     println(Json.decodeFromString(ListSerializer(ProjectSerializer), string))
36 }
37