2017-06-19 12 views
0

似乎这里建档的错误:https://github.com/google/gson/issues/513Gson正在重置JSON中不能返回的字段的值。解决方法?

麻烦的是我不知道的任何变通办法,我是相当新的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方法中添加断点,当它试图解析reviewed时确实返回true。所以我真的不明白,我可以把它记录下来就是我上面发布的错误。

有没有人有更好的解决方案?看来这个bug已经存在了一段时间了。

欣赏帮助。

编辑:

这里是如何看在我的POJO

private boolean reviewed; 

//Getters and setters 
public boolean isReviewed() { 
    return reviewed; 
} 

public void setReviewed(boolean reviewed) { 
    this.reviewed = reviewed; 
} 
+0

你的“评论”栏目是怎样的?它是一个原始的'boolean'还是一个包装器'Boolean'?它是否有任何初始化程序? –

+0

@LyubomyrShaydariv更新了我的问题,将布尔设置为基元,但没有解决它。 –

+1

这是因为原始字段总是获取默认值。 – null

回答

1

GSON并没有真正的领域 “复位” 为默认值。它实际上是从您为其提供的类创建一个新实例。然后将所有来自json的字段设置为您的对象。

这是你应该做的。您必须在从json返回的同一个实例中设置reviewed字段。

相关问题