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

In Gson, how can I deserialize a Map of Lists of arbitrary classes?

我有一个API,returns数据如下:

{
    gene: [ ],
    attribute: [ ],
    dataset: [ ]
}

每个 List 都包含一个应反序列化为特定 class 的对象。例如,dataset 列表中的每个 JSON 对象都应反序列化为 Dataset class。我无法使它正常工作。这是我目前的尝试:

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

提前致谢。

一位同事建议编写一个包装器 class 来描述模式。这使得序列化和反序列化变得简单。

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