Мне нужен наш анализатор GSON, чтобы иметь возможность обрабатывать массив против отдельных объектов.У меня это работает, где он распознает любой MutableList и попадает в адаптер Deserializer ниже.Тем не менее, мне не хватает фрагмента, в котором ему не нравится тип "T" при выполнении сериализации в объект.Я понимаю, что на данный момент ему нужен тип, но есть ли что-то, чего мне не хватает, чтобы иметь возможность сделать вывод, учитывая то, что у нас здесь?
class JsonArrayObjectAdapter<T>: JsonDeserializer<MutableList<T>> {
override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): MutableList<T> {
val list = mutableListOf<T>()
json?.let {
context?.let {
if (json.isJsonArray) {
for (element in json.asJsonArray) {
val obj: T = context.deserialize(element, T::class.java) // does not like this
list.add(obj)
}
} else if (json.isJsonObject) {
val obj: T = context.deserialize(json, T!!::class.java) // does not like this
list.add(obj)
}
}
}
return list
}
}
Я получаю эту ошибку компиляции при попытке использовать T::class.java
:
Cannot use 'T' as reified type parameter. Use a class instead.
Вот пример класса данных, который я использую для справки:
data class ExampleDataClass(
@SerializedName("ExampleKey") val exampleVar: MutableList<ExampleSubDataClass>
)
А вот как я создаю gson:
val listType = object : TypeToken<MutableList<ExampleDataSubClass>>() {}.getType()
val gson = GsonBuilder()
.registerTypeAdapter(listType, JsonArrayObjectAdapter<ExampleDataSubClass>())
.create()
result = gson.fromJson(jsonString, ExampleDataClass::class.java)