11

サーバーからjson配列を取得しましたresponse

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

gsonを使用して、上記の json データを JavaList<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 cannot be cast to Personを取得しました。私の問題を取り除く方法は?List<Person>json 配列をオブジェクトに変換したいだけです。何か助けはありますか?

4

1 に答える 1

24

Gsonがリスト内のジェネリック型を認識できるように、アンマーシャリングにはスーパータイプトークンを使用する必要があります。これを試して:

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

そして、そのように結果を繰り返します:

for(Person person : personList) {
    // some code here
}
于 2013-03-01T13:32:21.220 に答える