我正在使用GSON库处理来自Tone Analyzer API(IBM Bluemix)的数据
在我的应用程序中,我使用静态方法创建一个ToneAnalysis
对象,因为我只需要读取对象属性,而不是创建它的新实例。所以我永远不需要这样做:
ToneAnalysis ta = new ToneAnalysis();
我现在正在做的事情是::
string json = "{\"document_tone\": { ... } }";
ToneAnalysis ta = ToneAnalysis.fromJsonString(json)
这种方法意味着我最终得到了一个私有的无参数空构造函数:
public class ToneAnalysis {
private DocumentTone document_tone;
public DocumentTone getDocumentTone() {
return this.document_tone;
}
public static ToneAnalysis fromJsonString(String json) {
return new Gson().fromJson(json, ToneAnalysis.class);
}
private ToneAnalysis() {
}
}
因为fromJson
通过反射创建对象。我无法做到这一点:
this = gson.fromJson(json, ToneAnalysis.class);
有没有办法允许将JSON对象反序列化为现有对象,还是需要重新考虑我的设计?
答案 0 :(得分:0)
我需要重新考虑我的设计吗?
不是,因为id
没有非ToneAnalysis
static
字段。当一个对象没有final
个字段时,您可以将JSON反序列化为该对象,如下所示:
final
在您的情况下,您必须复制的唯一字段是public class Foo {
Object foo, bar, baz, qux, foobar, barfoo;
public void deserializeJsonIntoThis(String json) {
Foo deserialized = new Gson().fromJson(json, Foo.class);
this.foo = deserialized.foo;
this.bar = deserialized.bar;
this.baz = deserialized.baz;
// ... copy other fields from deserialized to this like the above
}
}
。这意味着您可以反序列化document_tone
个实例' JSON到现有的ToneAnalysis
实例中,只有一行!
ToneAnalysis