java – 使用GSON反序列化通用类型

我有一些问题在我的Android应用程序(使用Gson库)实现Json反序列化

我做类这样

public class MyJson<T>{
    public List<T> posts;
}

和反序列化调用是:

public class JsonDownloader<T> extends AsyncTask<Void, Void, MyJson<T>> {
...
protected MyJson<T> doInBackground(Void... params) {
  ...
    Reader reader = new InputStreamReader(content);
    GsonBuilder gson = new GsonBuilder();
    Type collectionType = new TypeToken<MyJson<T>>() {}.getType();
    result = gson.create().fromJson(reader, collectionType);
  ...
  }
}

问题是result.posts list调用后保存一个LinkedTreeMap对象的数组(具有正确的值,因此问题是反序列化),而不是MyJson对象。当我使用MyObject而不是T一切运行良好,MyObject是正确的。

所以有没有任何方法来实现反序列化调用,而不创建定制解串器?

最佳答案
你有没有尝试过?

gson.create().fromJson(reader, MyJson.class);

编辑

后看了this帖子似乎你使用的类型是正确的。我相信你的问题是使用T.你必须记住,与Java有类型擦除。这意味着在运行时所有的T实例都被替换为Object。因此在运行时你正在传递的GSON真的是MyJson< Object&gt ;.如果您尝试使用具体类代替< T>我相信它会工作。

Google Gson – deserialize list<class> object? (generic type)

转载注明原文:java – 使用GSON反序列化通用类型 - 代码日志