サーバーに接続し、いくつかの引数に基づいて、GSONで指定された(ジェネリックを介して)クラスに解析されるjson-stringを取得するクラスを作成しています。
担当クラスの簡略版は次のようになります。
class Executor<T> {
private Response<T> response;
public void execute() {
Type responseType = new TypeToken<Response<T>>() {}.getType();
this.response = new Gson().fromJson(json, responseType);
}
public Response<T> getResponse() { return this.response; }
}
(JSON
-変数は次のようになります。)
逆シリアル化されたデータを格納するクラスは、次のようになります。
class Response<T> {
private List<T> data = null;
public List<T> getData() { return this.data; }
}
データが逆シリアル化されようとしているクラス:
public class Language {
public String alias;
public String label;
}
そして、実行されるコードは上記のクラスを利用します。
Executor<Language> executor = new Executor<Language();
List<Language> languages = executor.execute().getResponse().getData();
System.out.println(languages.get(0).alias); // exception occurs here
その結果、次の例外が発生します
ClassCastException:com.google.gson.internal.StringMapをsunnerberg.skolbibliotek.book.Languageにキャストできません
ヘルプや提案は大歓迎です!