Gson用扩展类反序列化当前对象

时间:2018-05-23 10:06:41

标签: java polymorphism gson

我是java的新手(哼......不......我10年前在学校学过Java,但从今天起就没用过它)。

我有一个对应于我的json的对象类,它是使用网​​站http://www.jsonschema2pojo.org/生成的(在此简化):

public class ServerDatasObject {
  private Integer error;
  private Boolean isOffline;
  public Integer getError() {
      return error;
  }
  public Boolean getIsOffline() {
      return isOffline;
  }
}

另一个用于访问所有对象数据的类(也简化了):

public class ServerDatasHandler extends ServerDatasObject {
  public ServerDatasHandler(String json) {
    Gson gson = new Gson();
    // how to populate current object using : gson.fromJson(json, ServerDatasObject.class);
  }
}

问题在于代码:如何填充当前对象? 我搜索并发现了一些关于InstanceCreator的信息:

final Foo existing;
InstanceCreator<Foo> creator = new InstanceCreator<Foo>() {
  public Foo createInstance(Type type) { return existing; }
}

Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class, creator).create();
Foo value = gson.fromJson(jsonString, Foo.class);
// value should be same as existing

但我不明白如何使用它,以及它是否是我需要的。

最终目标是

{
  ServerDatasHandler serverDatasHandler = new ServerDatasHandler (json);
  do something with serverDatasHandler.getError()
}

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以创建一个单独的静态方法,从json:

创建处理程序
public static ServerDatasHandler fromJsonConfig(String json) {
  Gson gson = new Gson();
  ServerDatasHandler handler = gson.fromJson(json, ServerDatasHandler.class);
  return handler;
}

当然,您也可以将此方法移至工厂。

我从未在构造函数中使用InstanceCreator,因为解析JSON几乎不是构造函数的任务。最好将它隐藏在框架或您自己的工厂内。但是,如果您从InstanceCreator方法返回ServerDatasHandler.this,则createInstance的示例也会有用。