当我运行以下代码来保存JSON时:
String regionObject = this.gson.toJson(parentRegion);
JsonFileInputOutput.saveObjectToTextFile(regionObject,
"./tests/model/util/test_saveRegionObject.txt");
然后我重新打开创建的.txt文件:
public void test_openRegionObject() throws IOException {
String regionAsString = JsonFileInputOutput
.openObjectInTextFile("./tests/model/util/test_saveRegionObject.txt");
Gson gson = new Gson();
Region LGNRegion = gson.fromJson(regionAsString, Region.class);
System.out.println(LGNRegion.toString());
}
它完美无缺。
但是,当我尝试将第二段代码放入另一个不包含第一段代码的类时,我收到以下错误:
java.lang.RuntimeException Failed to invoke public model.MARK_II.Cell() with no args
Cell
是在Region
类中使用的自定义类。以下是Cell
类的实现:
public abstract class Cell {
protected boolean isActive;
public Cell() {
this.isActive = false;
}
public boolean getActiveState() {
return this.isActive;
}
public void setActiveState(boolean isActive) {
this.isActive = isActive;
}
}
我的问题是如何修复此异常,以便我可以使用第一段代码创建一个正确的序列化JSON。
答案 0 :(得分:0)
这里有两个问题。
为什么我得到例外?这很容易回答:您的Cell
类(或更好的Cell
类的子类,因为Cell
是抽象的)没有没有参数的构造函数。也许它有一个带有一个或多个参数的构造函数。
为什么我无法打开通用文件?很难说没有向我们展示文件。确定如果将Json序列化保存到文件中并打开它就没有错误。我最好的猜测是:当你序列化并保存时,你内部没有Cell
子类(可能是成员变量为空),每当你打开另一个文件时,可能会定义Cell
个子类,所以回答1。适用。