我试图将对象保存为json字符串的文件!但是当我尝试在没有ExclusionStrategy的情况下为GsonBuilder做的时候,它给了我一个"重复的名字在Json Exception字段hashCode_在我的班级" !我在谷歌搜索并找到了一个解决方案,我应该使用ExclusionStrategy并跳过一些游戏!所以我这样做了,这次我得到了Stack溢出异常!我不知道该做什么,在互联网上似乎没有这个问题的答案!
这是我的convertToJsonString方法:
public static <E> String convertToJsonString(E e) {
ExclusionStrategy strategy = new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
if(f.getName().equals("hashCode_"))
return true;
return false;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
};
gson=new GsonBuilder().setExclusionStrategies(strategy).create();
return gson.toJson(e);
}
这是我制作JsonElement的地方
public static <E> JsonElement createJsonElement(E e) {
return gson.toJsonTree(e);
}
这就是我将jsonString保存到文件的地方:
public void writeToFileHotel(Hotel hotel) {
JsonElement element= JsonUtils.createJsonElement(hotel);
JsonUtils.writeJsonToFile(element,allGiataHotels_File);
}
这是我的例外,没有ExclusionStrategy
Exception in thread "main" java.lang.IllegalArgumentException: class
ir.viratech.tickbed.model.user.AgencyUser declares multiple JSON fields
named hashCode_
这是ExclusionStrategy的例外
Exception in thread "main" java.lang.StackOverflowError
注意:在JsonElement element = JsonUtils.createJsonElement(hotel)line
上确认了IllegalArgumentException异常答案 0 :(得分:0)
当您的对象存在循环依赖时,会发生Stackoverflow错误。
您可能需要使用TypeAdapter