Gson正在重置未返回JSON的字段的值。解决方法?

时间:2017-06-19 15:13:06

标签: android json gson

似乎在此处提交了一个错误: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;
}

1 个答案:

答案 0 :(得分:1)

Gson并没有真正&#34;重置&#34;该字段为其默认值。它实际上是从您为其提供的类中创建一个新实例。然后将所有来自json的字段设置为您的对象。

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