summaryrefslogtreecommitdiff
path: root/guide/example/example-json-23.kt
diff options
context:
space:
mode:
Diffstat (limited to 'guide/example/example-json-23.kt')
-rw-r--r--guide/example/example-json-23.kt32
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"}]}
+ """))
+}