Это скорее обходной путь, но после перехода по коду KotlinxSerializer
я не смог найти другого пути его обхода.Например, если вы посмотрите на KotlinxSerializer.read()
, то увидите, что он пытается найти mapper
на основе type
, но в данном случае это просто kotlin.collections.List
и не разрешается.Я пытался вызвать что-то вроде setListMapper(MyClass::class, MyClass.serializer())
, но это работает только для сериализации (используя метод lookupSerializerByData
в write
)
override suspend fun read(type: TypeInfo, response: HttpResponse): Any {
val mapper = lookupSerializerByType(type.type)
val text = response.readText()
@Suppress("UNCHECKED_CAST")
return json.parse(mapper as KSerializer<Any>, text)
}
Итак, что я закончил, было что-то вроде (обратите внимание на serializer().list
call)
suspend fun fetchBusStops(): List<BusStop> {
val jsonArrayString = client.get<String> {
url("$baseUrl/stops.json")
}
return JSON.nonstrict.parse(BusStop.serializer().list, jsonArrayString)
}
Не идеально и, очевидно, не использует JsonFeature
.