在Gson中,如何反序列化任意类的列表映射?

时间:2015-06-09 18:26:51

标签: java json gson

我有一个返回数据的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

提前致谢。

1 个答案:

答案 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();