1

当我运行以下代码来保存 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 作为我使用第一段代码创建的 JSON。

4

1 回答 1

0

这里有两个问题。

  1. 为什么我得到例外?这很容易回答:你的Cell类(或者更好的是你的类的子Cell类,因为Cell它是抽象的)没有没有参数的构造函数。也许它有一个带有一个或多个参数的构造函数。

  2. 为什么我无法打开通用文件?如果不向我们展示文件,很难说。可以肯定的是,如果您将 Json 序列化保存到文件中并打开它,您就没有错误。我最好的猜测是:当您序列化并保存时,您没有Cell子类(可能成员变量为空),每当您打开另一个文件时,可能Cell定义了子类,因此对 1. 的回答适用。

于 2013-09-06T20:44:49.070 回答