2012-01-24 4 views
2

Новые версии gson имеют много изменений относительно десериализации Коллекций. Прежде чем мы использовали TypeToken для извлечения списка из Json-массива, однако TypeToken больше не существует в библиотеке. Есть ли какие-нибудь примеры того, какой подход сейчас займет? ... смотрели документацию, но это не понятно. Он предложил реализовать интерфейс JsonDeserializer, и с помощью GsonBuilder ... buit снова это не понятно. Есть ли у кого-нибудь пример того, как мы можем десериализовать коллекцию с помощью Gson ?. Большое спасибо.Gson deserialize Коллекции

+0

Какую версию gson вы ссылаясь на? потому что я думаю, что у всех последних версий Gson все еще есть «TypeToken». – Nikhil

+1

Да, извините, вы правы ... мое замешательство было связано с тем, что теперь конструктор объявляется защищенным в ящике 2.1, таким образом, следующая строка кода: Тип typeOfCollectionOfFoo = new TypeToken >() {}. GetType () больше не работает. Это была путаница. – Pablo

+0

О, ладно. Пожалуйста, ответьте на свой вопрос ниже и отметьте его как ответ. Это может помочь кому-то! – Nikhil

ответ

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