klaxon
klaxon copied to clipboard
Error deserializing object with list of maps
In Klaxon 2.1.14
, the following test fails with the following exception.
@Test
fun objectWithListOfMaps() {
val mapper = Klaxon()
data class Data(val data: List<Map<String, String>>)
val data = Data(listOf(mapOf("name" to "john")))
val json = mapper.toJsonString(data)
Assert.assertThat(mapper.parse<Data>(json), CoreMatchers.equalTo(data))
}
java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl cannot be cast to java.lang.Class
at com.beust.klaxon.DefaultConverter.fromJsonObject(DefaultConverter.kt:163)
at com.beust.klaxon.DefaultConverter.convertValue(DefaultConverter.kt:201)
at com.beust.klaxon.DefaultConverter.fromJson(DefaultConverter.kt:13)
at com.beust.klaxon.DefaultConverter.fromCollection(DefaultConverter.kt:117)
at com.beust.klaxon.DefaultConverter.convertValue(DefaultConverter.kt:200)
at com.beust.klaxon.DefaultConverter.fromJson(DefaultConverter.kt:13)
at com.beust.klaxon.JsonObjectConverter.retrieveKeyValues(JsonObjectConverter.kt:81)
at com.beust.klaxon.JsonObjectConverter.fromJson(JsonObjectConverter.kt:28)
at com.beust.klaxon.DefaultConverter.fromJsonObject(DefaultConverter.kt:175)
at com.beust.klaxon.DefaultConverter.convertValue(DefaultConverter.kt:201)
at com.beust.klaxon.DefaultConverter.fromJson(DefaultConverter.kt:13)
at com.beust.klaxon.Klaxon.fromJsonObject(Klaxon.kt:273)
However, this test does pass. Perhaps Klaxon doesn't like the nested generics.
@Test
fun objectWithListOfObjectsWithMaps() {
val mapper = Klaxon()
data class Row(val row: Map<String, String>)
data class Data(val rows: List<Row>)
val data = Data(listOf(Row(mapOf("name" to "john"))))
val json = mapper.toJsonString(data)
Assert.assertThat(mapper.parse<Data>(json), CoreMatchers.equalTo(data))
}