使用GSON在Java中打开.txt文件

时间:2013-06-27 02:43:24

标签: java json io gson

当我运行以下代码来保存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。

1 个答案:

答案 0 :(得分:0)

这里有两个问题。

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

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