GSON没有解析布尔值(总是假的)

时间:2016-06-09 06:54:35

标签: java json boolean gson

我正在使用Retrofit来获取JSON文档。问题是,所有布尔值总是错误的。

响应如下:

{
   "gender":[0,1],
   "age":[20,30],
   "likesLeaveHome":false,
   "likesSport":false,
   "likesCulture":false,
   "likesTraveling":false
   ...
}

我用

调用改造方法
onResponse(Call<SearchProfile> call, Response<SearchProfile> response)

应该解析响应的SearchProfile类看起来像这样:

public class SearchProfile {

    public ArrayList<Integer> gender = new ArrayList<>(); // works fine
    public ArrayList<Integer> age    = new ArrayList<>(); // works fine

    ...

    public Boolean likesLeaveHome = true;    // always false

    @SerializedName("likesSport")
    public boolean likesSport     = true;    // always false

    @SerializedName("likesCulture")
    public Boolean likesCulture;             // always false

    @SerializedName("likesTraveling")
    public Boolean mLikesTraveling;          // always false

    public boolean isLikesTraveling() {
        return mLikesTraveling;
    }

    public void setLikesTraveling(boolean likesTraveling) {
        mLikesTraveling = likesTraveling;
    }

}

正如您所看到的,它是一个简单的pojo类。列出像&#34;性别&#34;和&#34;年龄&#34;工作得很好。但是,布尔人仍然无法设定。 (这个特别奇怪,因为通过Retrofit发送这个对象正好发送了这个文件,所以GSON肯定知道布尔值。)

如剪辑所示,我还尝试了其他方法,例如将布尔包装类作为类型而不是布尔值。 我还使用了 @SerializeName 注释或getter和setts方法等。 仍然所有的布尔都是假的。即使我声明它们默认为true(因此GSON似乎总是用false覆盖此值)。

希望有人有个好主意!

1 个答案:

答案 0 :(得分:0)

示例中要解析的JSON的所有值均为false。解析时,GSON将使用反射来覆盖类的字段值,这意味着从JSON解析的任何值都将是该字段的值,而不管它如何在类中初始化。

这是一个示例响应,它将导致将字段设置为true。同样,这取决于您要解析的JSON。

{
   "gender":[0,1],
   "age":[20,30],
   "likesLeaveHome":true,
   "likesSport":true,
   "likesCulture":true,
   "likesTraveling":true
   ...
}