summaryrefslogtreecommitdiff
path: root/guide/example/example-json-24.kt
diff options
context:
space:
mode:
Diffstat (limited to 'guide/example/example-json-24.kt')
-rw-r--r--guide/example/example-json-24.kt30
1 files changed, 30 insertions, 0 deletions
diff --git a/guide/example/example-json-24.kt b/guide/example/example-json-24.kt
new file mode 100644
index 00000000..010bd27d
--- /dev/null
+++ b/guide/example/example-json-24.kt
@@ -0,0 +1,30 @@
+// This file was automatically generated from json.md by Knit tool. Do not edit.
+package example.exampleJson24
+
+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())) {
+
+ override fun transformSerialize(element: JsonElement): JsonElement {
+ require(element is JsonArray) // this serializer is used only with lists
+ return element.singleOrNull() ?: element
+ }
+}
+
+fun main() {
+ val data = Project("kotlinx.serialization", listOf(User("kotlin")))
+ println(Json.encodeToString(data))
+}