Mike Wong
10/02/2024, 4:20 PMKSerializerdecoder.decodeString()[JsonDecodingException (Expected JsonPrimitive at ... but found ...)Mike Wong
10/02/2024, 4:29 PMDecoderJsonDecoderdecodeJsonElement()JsonPrimitiveJsonArrayglureau
10/02/2024, 4:33 PMJsonTransformingSerializerMike Wong
10/02/2024, 4:48 PMVampire
10/02/2024, 4:51 PMglureau
10/02/2024, 4:54 PMMike Wong
10/02/2024, 5:23 PM@Serializable(with = EntryValueSerializer::class)
sealed interface EntryValue {
	@Serializable
	data class Reference(val reference: String) : EntryValue
	@Serializable
	data class Predefined(val mapping: Map<String, String>) : EntryValue
}Mike Wong
10/02/2024, 5:25 PM@Serializable
data class EntryRegistry(
	val entries: Map<String, EntryValue>,
	// More properties
)Mike Wong
10/02/2024, 5:26 PMoverride fun deserialize(decoder: Decoder): EntryValue {
		val jsonDecoder = decoder as? JsonDecoder ?: throw IllegalArgumentException("This class can only be deserialized from JSON")
		return when (val jsonElement = jsonDecoder.decodeJsonElement()) {
			is JsonPrimitive -> EntryValue.Reference(jsonElement.content)
			is JsonObject -> {
				EntryValue.Predefined(jsonElement.toMap().mapValues { it.value.jsonPrimitive.content })
			}
			else -> throw IllegalArgumentException("Excpected either JsonPrimitive or JsonArray but was $jsonElement")
		}
	}JsonDecoderephemient
10/02/2024, 5:32 PMVampire
10/02/2024, 5:39 PMMike Wong
10/02/2024, 6:07 PMMike Wong
10/02/2024, 6:20 PMExpected class kotlinx.serialization.json.JsonObject as the serialized body of EntryValue.Predefined, but had class kotlinx.serialization.json.JsonArray