У меня возникли проблемы с разбором общего ArrayList
с GSON. Я подтвердил, что этот метод работает, если указан конкретный тип для ArrayList
(без каких-либо дженериков), но я бы хотел написать метод, который работает с generics.Разбор общего массива ArrayList с использованием GSON
Основываясь на других вопросах переполнения стека, это должно работать, и я не могу понять, почему это не так. Он не разбирает ArrayList
, поэтому я получаю коллекцию LinkedTreeMap
. Общий метод ниже:
public <T> List<T> listFromJson(@NonNull Class<T> classOfT) throws JsonSyntaxException {
if (data == null)
return null;
Gson gsonParser = new Gson();
TypeToken<ArrayList<T>> token = new TypeToken<ArrayList<T>>() {};
return gsonParser.fromJson(gsonParser.toJson(data), token.getType());
}
Редактировать:data
это просто Object
, который содержит JSON, чтобы быть разобраны. Инструкция gsonParser.toJson(data)
работает просто отлично.
И я звоню это так, где MyClass
может быть любой пользовательский класс Java я написал:
List<MyClass> resList = result.listFromJson(MyClass.class);
Любая помощь будет оценена, я не знаю, в чем проблема, но это связано с шаблонами точно, поскольку не общий метод будет выполнять эту работу.
Edit2: Просто чтобы прояснить, я также в том числе метод не генериков, которые работали:
public List<MyClass> listFromJson() throws JsonSyntaxException {
Type listType = new TypeToken<ArrayList<MyClass>>(){}.getType();
Gson gsonParser = new Gson();
return gsonParser.fromJson(gsonParser.toJson(data), listType);
}
Здравствуйте, извините за долгое время без ответа, но я очень занят в эти дни. Я использую gson версии 1.19, управляемый из maven. Мне нужно продолжать использовать эту версию. Попробуйте определить пользовательский класс с некоторыми атрибутами и протестировать метод с ним, он не работает для меня. Это сообщение было оригинально предназначено для android, но протестировало метод в Java, и все, что я получаю, это LinkedHashMap в результате процесса синтаксического анализа ... не могу понять, почему –
JorgeGRC