xref: /aosp_15_r20/external/kotlinx.serialization/guide/example/example-json-23.kt (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
1 // This file was automatically generated from json.md by Knit tool. Do not edit.
2 package example.exampleJson23
3 
4 import kotlinx.serialization.*
5 import kotlinx.serialization.json.*
6 
7 import kotlinx.serialization.builtins.*
8 
9 @Serializable
10 data class Project(
11     val name: String,
12     @Serializable(with = UserListSerializer::class)
13     val users: List<User>
14 )
15 
16 @Serializable
17 data class User(val name: String)
18 
19 object UserListSerializer : JsonTransformingSerializer<List<User>>(ListSerializer(User.serializer())) {
20     // If response is not an array, then it is a single object that should be wrapped into the array
transformDeserializenull21     override fun transformDeserialize(element: JsonElement): JsonElement =
22         if (element !is JsonArray) JsonArray(listOf(element)) else element
23 }
24 
25 fun main() {
26     println(Json.decodeFromString<Project>("""
27         {"name":"kotlinx.serialization","users":{"name":"kotlin"}}
28     """))
29     println(Json.decodeFromString<Project>("""
30         {"name":"kotlinx.serialization","users":[{"name":"kotlin"},{"name":"jetbrains"}]}
31     """))
32 }
33