diff options
Diffstat (limited to 'guide/example/example-json-24.kt')
-rw-r--r-- | guide/example/example-json-24.kt | 30 |
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)) +} |