使用Gson反序列化为模板化类

时间:2016-08-27 00:11:16

标签: java templates serialization gson

我有一个带有嵌套子类的类

public class OuterClass {
class GenericClassHolder<R> {
    @SerializedName("results")
    List<R> results;

    public GenericClassHolder() {}

    public List<R> getResults() {
        return results;
    }
}

class ExampleClassA {
    @SerializedName("A")
    int a;

    public ExampleClassA() {}

    public int getA() {return a;}
}


class ExampleClassB {
    @SerializedName("B")
    String b;

    public ExampleClassA() {}

    public String getB() {return b;}
}
}

目前我希望能够拥有一个函数,该函数将hold类作为参数,并返回一个适当的GenericClassHolder实例,例如我当前的代码:

GenericClassHolder<ExampleClassA> genericA = parseJson(jsonString, ExampleClassA.class);

<T> GenericClassHolder<T> parseJson(final String jsonString, Class<T> variableClass) throws JsonSyntaxException {
    return GSON.fromJson(jsonString, new TypeToken<GenericClassHolder<T>>(){}.getType());
}

但是这在我当前的实现中不起作用,错误

  

无法为GenericClassHolder<T>调用no-args构造函数。使用Gson为此类型注册InstanceCreator可以解决此问题。

我如何简洁实现上述目标,即拥有一个函数,该函数将可能更改的类的规范作为输入并相应地解析为此对象?如果无法通过函数实现优雅的解决方案,如何在没有函数的情况下实现这一目标?

1 个答案:

答案 0 :(得分:0)

我在Google Appengine实例中部署了此代码,由于某些安全原因,我无法反序列化我在本地计算机上反序列化和复制的方式。解决方案是使反序列化的类静态;它们也嵌套在外部封装类中