繁体   English   中英

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

[英]Gson deserialize current object with extended class

我是Java的新手(哼...不。我10年前在学校学习Java,但是从今天开始就从未真正使用过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()
}

谢谢你的帮助

您可以创建一个单独的静态方法,该方法从json创建处理程序:

public static ServerDatasHandler fromJsonConfig(String json) {
  Gson gson = new Gson();
  ServerDatasHandler handler = gson.fromJson(json, ServerDatasHandler.class);
  return handler;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM