Новые версии gson имеют много изменений относительно десериализации Коллекций. Прежде чем мы использовали TypeToken для извлечения списка из Json-массива, однако TypeToken больше не существует в библиотеке. Есть ли какие-нибудь примеры того, какой подход сейчас займет? ... смотрели документацию, но это не понятно. Он предложил реализовать интерфейс JsonDeserializer, и с помощью GsonBuilder ... buit снова это не понятно. Есть ли у кого-нибудь пример того, как мы можем десериализовать коллекцию с помощью Gson ?. Большое спасибо.Gson deserialize Коллекции
2
A
ответ
2
версия 2.1 Google Gson больше не имеет публичный конструктор для класса TypeToken, вместо этого мы должны использовать один из статических методов, предоставленных им:
IE:
List<MyClass> myList= new ArrayList<MyClass>();
Type listType = TypeToken.get(myList.getClass()).getType();
myList= (new Gson()).fromJson(jsonString, listType);
+2
Это неверно ... listType в этом случае будет java.util.LinkedHashMap, поэтому JSON создаст список, в котором каждый элемент является экземпляром этого класса, и, конечно же, он будет генерировать ClassCastExceptions при итерировании списка. Каков правильный способ сделать это? Я не вижу причин, почему версия GSON 2.1 имеет конструктор доступа по умолчанию ... – Pablo
Какую версию gson вы ссылаясь на? потому что я думаю, что у всех последних версий Gson все еще есть «TypeToken». – Nikhil
Да, извините, вы правы ... мое замешательство было связано с тем, что теперь конструктор объявляется защищенным в ящике 2.1, таким образом, следующая строка кода: Тип typeOfCollectionOfFoo = new TypeToken>() {}. GetType () больше не работает. Это была путаница. –
Pablo
О, ладно. Пожалуйста, ответьте на свой вопрос ниже и отметьте его как ответ. Это может помочь кому-то! – Nikhil