Gson не может десериализовать общий тип ArrayList, используя TypeToken

У меня есть модель для Gson с этой структурой:

data class ApiResponse(val isError: String, val errorMessage: String, data: T) 

Поле data является общим типом. Когда я пытаюсь проанализировать ответы API, он работает во всех случаях, кроме тех, где тип данных является ArrayList.

Я десериализую JSON следующим образом:

 val typeToken = object : TypeToken<SprucedApiResponse< T>>() {}.type Gson().fromJson<SprucedApiResponse<T>>(jsonResponseString, typeToken) 

Если общий тип T является обычным объектом, он работает правильно. Однако, если T является ArrayList, тогда я получаю эту ошибку:

 com.google.gson.internal.LinkedTreeMap cannot be cast to CustomObject 

Я пытался использовать @JvmSuppressWildcards но это не решает проблему.

Эта проблема, безусловно, связана с дженериками, поскольку Gson может анализировать этот не общий шаблон ArrayList на основе TypeToken:

 val typeToken = object : TypeToken<SprucedApiResponse<ArrayList<CustomClass>>>() {}.type 

Следовательно, эта проблема, похоже, влияет только на типичные типы ArrayList.

Кто-нибудь знает, как решить эту проблему, не прибегая к синтаксическому анализу TypeToken из метода?

Заранее спасибо.

Intereting Posts
Does java.util.HashMap не реализует java.util.Map в Котлине? Побитовая операция «и» в котлин Функция расширения не создает новый объект Observable Как добавить несколько операторов внутри оператора when в kotlin Как преобразовать вывод функции в Unit с Kotlin В Котлине, как делегировать интерфейс и предоставлять только открытый конструктор no-arg? Как переключить видимость FAB с другим FAB Кнопка с длинным нажатием Экземпляр фрагмента сохраняется, но дочерний фрагмент не повторно прикреплен Как добавить плагин Kotlin для Gradle в Android Studio 3.1 Canary 3 Kotlin: закрытые и закрытые классы Доступ к статическому полю из Java-суперкласса Kotlin: как преобразовать тест, который использует Thread.sleep для RxJava TestScheduler Котлинское умножение между обнуляемыми и невалютными ошибками float даже с нулевой проверкой Spring Boot вставляет недопустимое datetime в MariaDB, приводит к нулевому значению, а не к нулевому полю