I had some code like this in a custom serializer (...
# serialization
t
I had some code like this in a custom serializer (found elsewhere) that worked in 0.20.0:
Copy code
return when (val jsonElement = JsonElementSerializer.deserialize(decoder)) {
            is JsonArray -> jsonElement.content.map { parser.decodeFromString(dataSerializer, it.toString()) }
            else -> listOf(parser.decodeFromString(dataSerializer, jsonElement.toString()))
        }
but in 1.0.0-RC the JsonElementSerializer is not recognized. What is the replacement for this?
Sorry, whole method like so:
Copy code
override fun deserialize(decoder: Decoder): List<T> {
        return when (val jsonElement = JsonElementSerializer.deserialize(decoder)) {
            is JsonArray -> jsonElement.content.map { parser.decodeFromString(dataSerializer, it.toString()) }
            else -> listOf(parser.decodeFromString(dataSerializer, jsonElement.toString()))
        }
    }
To answer my own question: I took a look at the source for JsonElementSerializer and used as a clue as to what to do:
Copy code
override fun deserialize(decoder: Decoder): List<T> {
        return if (decoder is JsonDecoder) {
            when (val jsonElement = decoder.decodeJsonElement()) {
                is JsonArray -> jsonElement.map { parser.decodeFromString(dataSerializer, it.toString()) }
                else -> listOf(parser.decodeFromString(dataSerializer, jsonElement.toString()))
            }
        } else {
            emptyList()
        }
    }
I should likely do something smarter for the else clause, but this is only used in one place in my code to handle a bad json object (which should always be an array).
v
also, you can use
JsonElement.serializer()
instead