似乎在此处提交了一个错误:https://github.com/google/gson/issues/513
麻烦的是,我不知道任何变通方法,我对Gson来说还是个新手。我在我的POJO中有一个布尔字段,我自己设置它,它没有进入JSON,我设置为true
,当对象被Gson解析时,它的'回到false
。不应该发生的行为。
这是我到目前为止所尝试的:
Gson gson = new GsonBuilder()
.serializeNulls()
.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getName().equals("reviewed");
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
})
.create();
正如您所看到的,我已尝试跳过字段reviewed
,但它仍然设置为false
。我还尝试在shouldSkipField
方法中添加断点,并在尝试解析true
时确实返回reviewed
。所以我真的不明白,我可以把它归结为我上面发布的错误。
有没有人有更好的解决方案?好像这个bug已经存在了一段时间。
感谢帮助。
编辑:
以下是我在POJO中的表现
private boolean reviewed;
//Getters and setters
public boolean isReviewed() {
return reviewed;
}
public void setReviewed(boolean reviewed) {
this.reviewed = reviewed;
}
答案 0 :(得分:1)
Gson并没有真正&#34;重置&#34;该字段为其默认值。它实际上是从您为其提供的类中创建一个新实例。然后将所有来自json的字段设置为您的对象。
这是你应该做的。您必须在从json返回的同一实例中设置reviewed
字段。