TL DR
With Jackson 2.6.3-2 do as @ jason-minard advises, and simply use:
import com.fasterxml.jackson.module.kotlin.readValue val listOfD: List<D> = jacksonMapper.readValue(jsonStr)
the details
There is nothing special about collection descriptorization in Kotlin, although you will need the kotlin jackson module to deserialize data classes without annotations.
Namely, you will need complete type information in your case in order to track the general list parameter ( D ); otherwise (for example, if you use readValue(jsonStr, List::class.java) ), Jackson will only see it as an erased type (i.e. List ) (as Kotlin makes explicit) and deserializes it to List<Map<String, String>> , not knowing, this should build D s. This can be circumvented by using an anonymous subclass of TypeReference in Java so that Jackson can access the full reified type for deserialization at runtime.
Translating Jackson's Java code literally into Kotlin, you get the following what you want (and, as @eski commented, note that JSON is not valid in your example):
val jacksonMapper = ObjectMapper().registerModule(KotlinModule()) val jsonStr = """[{"a": "value1", "b": 1}, {"a": "value2", "b":2}]""" val listOfD: List<D> = jacksonMapper.readValue(jsonStr, object : TypeReference<List<D>>(){}) assertEquals(listOf(D("value1", 1), D("value2", 2)), listOfD)
This is a bit verbose and unpleasant, so you can hide it in the Kotlin function (extension) (especially if you plan to use it several times):
inline fun <reified T> ObjectMapper.readValue(json: String): T = readValue(json, object : TypeReference<T>(){})
which allows you to simply call:
val listOfD: List<D> = jacksonMapper.readValue(jsonStr)
And this is exactly what is included in 2.6.3-2 Kotlin's 2.6.3-2 module.