Gson:将Gson LinkedTreeMap转换为不同类型的通用ArrayList

时间:2016-03-23 13:36:10

标签: java generics arraylist gson

我之前已经在这里问过类似的问题,但解决方案hereherehere对我来说确实没什么用处,因为它们处理的是包含的通用列表单一类型的列表。

我有一个类似下面的POJO,我使用Gson.toJson()解析为JSON,将我的数据库表保存为字符串并使用Gson.fromJson()将其恢复。

public class MyClass implements Serializable{
    private HashMap<String, List> statistic;

    @SuppressWarnings("rawtypes")
    public void setStatistic(HashMap<String, List> statistic) {
        this.statistic = statistic;
    }

    @SuppressWarnings("rawtypes")
    public HashMap<String, List> getStatistic() {
        return statistic;
    }
}

这是问题所在。 HashMap中的通用List包含以下信息。

List<ClassOne> one = new ArrayList<ClassOne>();
List<ClassTwo> two = new ArrayList<ClassTwo>();

HashMap<String, List> list = new HashMap<String, List>();
list.put("one", one);
list.put("two", two);

现在当我将JSON解析回MyClass时,我用通用列表返回HashMap。但有关ClassOneClassTwo的信息丢失了,我只是将其中的信息作为LinkedTreeMap获取,而这些信息无法通过

再次转换为上述类型
MyClass myObject = gson.fromJson(jsonString, MyClass.class);

HashMap<String, List> statistic = myObject.getStatistic();

List<ClassOne> one = (List<ClassOne>) statistic.get("one");
List<ClassTwo> one = (List<ClassTwo>) statistic.get("two");

我该如何解决这个问题?我无法将POJO的结构更改为两个ArrayLists而不是一个HashMap,所以我坚持这个。

0 个答案:

没有答案