Как с помощью Ktor десериализовать ответы JSON со списками разных типов?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как с помощью Ktor десериализовать ответы JSON со списками разных типов?

Сообщение Anonymous »


Я работаю над приложением для Android, которое использует Ktor для HTTP-запросов к API. В зависимости от запроса ответ может содержать список одного из двух типов. Код работает, когда я определяю четыре класса данных: по одному для каждого типа ответа и два разных класса данных результата — по одному для каждого типа результата. Однако я хотел бы знать, можно ли использовать только один класс данных ответа и указать ему, какой класс данных использовать для списка, когда я делаю HTTP-запрос.

Я использую библиотеку сериализации Kotlin

Классы выглядят следующим образом:

`

@Serializable класс данных ResultOne( количество значений: Int, результат val: List ) @Сериализуемый класс данных ResultTwo( количество значений: Int, результат val: List ) @Сериализуемый класс данных TypeOne( значение str1: Строка, значение str2: Строка, значение int1: Int ) @Сериализуемый класс данных TypeTwo( значение str1: Строка, val dbl1: Двойной, значение int1: Int ) А запрос выглядит примерно так:
... импортировать io.ktor.serialization.kotlinx.json.json ... частный вал httpClient = HttpClient { установить (ContentNegotiation) { json(Json{ isLenient = правда ignoreUnknownKeys = правда }) } } весело getResultTypeOne(){ val ответ = responseOne(listOf(1, 2)).result } частная приостановка развлечения responseOne(ints: List): ResultOne { val AvailableShows = httpClient.get("https://my.api.com/search") вернуть доступныйShows.body() } весело getResultTypeTwo(){ val ответ = responseTwo(listOf(1, 2)).result } частная приостановка развлечения responseTwo(ints: List): ResultTwo { val AvailableShows = httpClient.get("https://my.api.com/search") вернуть доступныйShows.body() }
В HTTP-вызовах есть некоторая избыточность, поскольку они одинаковы, за исключением указания другого класса данных для разных типов результатов. Есть ли способ вместо этого повторно использовать один и тот же HTTP-вызов, но указать ему, какой тип результата следует ожидать в этом вызове?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»