[英]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.