Преобразование json-массива в объект списка java

Я получил массив json с сервера response:

[{"id":1, "name":"John", "age": 20},{"id":3, "name":"Tomas", "age": 29}, {"id":12, "name":"Kate", "age": 32}, ...]

Я хотел бы использовать gson для преобразования указанных выше json-данных в объект Java List<Person>. Я пробовал следующим образом:

Во-первых, я создал класс Person.java:

public class Person{
  private long id;
  private String name;
  private int age;

  public long getId(){
     return id;
  }

  public String getName(){
     return name;
  }

  public int getAge(){
     return age;
  }
}

Затем в моем классе обслуживания я сделал следующее:

//'response' is the above json array 
List<Person> personList = gson.fromJson(response, List.class); 

for(int i=0; i<personList.size(); i++){
   Person p = personList.get(i); //java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to Person
}

Я получил Exception java.lang.ClassCastException: java.util.LinkedHashMap не может быть передан Person. Как избавиться от моей проблемы? Я просто хочу преобразовать массив json в объект List<Person>. Любая помощь?

Ответ 1

Вам нужно использовать токен супертипа для unmarshalling, так что Gson знает, что такое общий тип в вашем списке. Попробуйте следующее:

TypeToken<List<Person>> token = new TypeToken<List<Person>>(){};
List<Person> personList = gson.fromJson(response, token.getType());

И повторите результаты как таковые:

for(Person person : personList) {
    // some code here
}