在 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();
我有一个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();