Как с помощью Ktor десериализовать ответы JSON со списками разных типов? ⇐ Android
-
Anonymous
Как с помощью Ktor десериализовать ответы JSON со списками разных типов?
Я работаю над приложением для 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-вызов, но указать ему, какой тип результата следует ожидать в этом вызове?
Я работаю над приложением для 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-вызов, но указать ему, какой тип результата следует ожидать в этом вызове?
Мобильная версия