У меня есть модель для 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 из метода?
Заранее спасибо.