klaxon icon indicating copy to clipboard operation
klaxon copied to clipboard

Error deserializing object with list of maps

Open oharaandrew314 opened this issue 6 years ago • 0 comments

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))
    }

oharaandrew314 avatar Mar 29 '18 18:03 oharaandrew314