diff options
Diffstat (limited to 'guide/example/example-json-23.kt')
-rw-r--r-- | guide/example/example-json-23.kt | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/guide/example/example-json-23.kt b/guide/example/example-json-23.kt new file mode 100644 index 00000000..ffa9f7d7 --- /dev/null +++ b/guide/example/example-json-23.kt @@ -0,0 +1,32 @@ +// This file was automatically generated from json.md by Knit tool. Do not edit. +package example.exampleJson23 + +import kotlinx.serialization.* +import kotlinx.serialization.json.* + +import kotlinx.serialization.builtins.* + +@Serializable +data class Project( + val name: String, + @Serializable(with = UserListSerializer::class) + val users: List<User> +) + +@Serializable +data class User(val name: String) + +object UserListSerializer : JsonTransformingSerializer<List<User>>(ListSerializer(User.serializer())) { + // If response is not an array, then it is a single object that should be wrapped into the array + override fun transformDeserialize(element: JsonElement): JsonElement = + if (element !is JsonArray) JsonArray(listOf(element)) else element +} + +fun main() { + println(Json.decodeFromString<Project>(""" + {"name":"kotlinx.serialization","users":{"name":"kotlin"}} + """)) + println(Json.decodeFromString<Project>(""" + {"name":"kotlinx.serialization","users":[{"name":"kotlin"},{"name":"jetbrains"}]} + """)) +} |