我有一个返回数据的API,如下所示:
{
gene: [ ],
attribute: [ ],
dataset: [ ]
}
每个List
都包含一个应该反序列化为特定类的对象。例如,dataset
列表中的每个JSON对象都应反序列化为Dataset
类。我无法让这个工作。这是我目前的尝试:
Type listType = new TypeToken<HashMap<String, List<Object>>>() {}.getType();
HashMap<String, List<Object>> map = new Gson().fromJson(json, listType);
List<Dataset> datasets = (List<Dataset>) (Object) map.get("dataset");
Dataset ds = datasets.get(0);
我得到的错误是:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to Dataset
提前致谢。
答案 0 :(得分:1)
一位同事建议编写一个包装类来描述模式。这使得序列化和反序列化变得简单明了。
public class JsonSchema {
private List<Dataset> datasets;
...
public List<Dataset> getDatasets() {
return datasets;
}
public void setDatasets(List<Dataset> datasets) {
this.datasets = datasets;
}
...
}
然后,为了序列化JSON,我使用setter并反序列化JSON,我写道:
JsonSchema jsonSchema = new Gson().fromJson(json, JsonSchema.class);
List<Dataset> datasets = jsonSchema.getDatasets();