[back]

2023-04-18 18:12:30 +09:00

Kotlin Serializerでarray or primitiveな値をSerializeしたい

Kotlin Serializerで"配列またはPrimitive型"を取る値を扱いたい場合。 今回のケースだと:

的な事をしたかった。

どうやったか

object StringListSerializer :
    JsonTransformingSerializer<String>(serializer()) {
    // If response is not an array, then it is a single object
    override fun transformDeserialize(element: JsonElement): JsonElement =
        if (element !is JsonArray) element.jsonPrimitive else element[0]
}

これを使いたいプロパティに@Serializable(with = StringListSerializer::class)する。 要素が配列でないならPrimitiveを返し、配列なら0番目を返すっていうすごいシンプルな感じの奴。たどりつくまでに結構苦労した