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?
tylerwilson
08/19/2020, 3:50 PM
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()))
}
}
tylerwilson
08/19/2020, 4:48 PM
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()
}
}
tylerwilson
08/19/2020, 4:49 PM
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).