Разбор JSON, содержащий массив перечислений в Kotlin с Klaxon

Я новичок в Kotlin и пытаюсь проанализировать массив перечислений из JSON:

val convertColor = object: Converter<Color> {
    override fun toJson(value: Color): String? = when(value) {
        Color.R -> "red"
        Color.G -> "green"
        Color.B -> "blue"
        else -> null
    }

    override fun fromJson(jv: JsonValue): Color = when(jv.inside) {
        "red" -> Color.R
        "green" -> Color.G
        "blue" -> Color.B
        else -> throw IllegalArgumentException("Invalid Color")
    }
}

enum class Color { R, G, B }
data class Root (val colors: Array<Color>)

Затем я пытаюсь разобрать образец с:

val klaxon = Klaxon().converter(convertColor)
val result = klaxon.parse<Root>("""
{
    "colors": ["red", "green", "blue"]
}
""")

Но я получаю это исключение во время выполнения:

Exception in thread "main" java.lang.IllegalArgumentException: array element type mismatch

Похоже, что конвертер не применяется к элементам массива.

1 ответ

Решение

Работает если заменить Array с List, который все равно рекомендуется:

data class Root(val colors: List<Color>)
Другие вопросы по тегам