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

Tob*_*ich 6 java json boolean gson retrofit

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

响应如下:

{
   "gender":[0,1],
   "age":[20,30],
   "likesLeaveHome":false,
   "likesSport":false,
   "likesCulture":false,
   "likesTraveling":false
   ...
}
Run Code Online (Sandbox Code Playgroud)

我正在调用改造方法

onResponse(Call<SearchProfile> call, Response<SearchProfile> response)
Run Code Online (Sandbox Code Playgroud)

而应该解析响应的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;
    }

}
Run Code Online (Sandbox Code Playgroud)

如您所见,它是一个简单的pojo类.像"性别"和"年龄"这样的列表工作得很好.尽管如此,布尔人还是无法设定.(这特别奇怪,因为通过Retrofit发送此对象正好发送此文档,因此GSON肯定知道布尔值).

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

希望有人有个好主意!

Joh*_*hey -1

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

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

{
   "gender":[0,1],
   "age":[20,30],
   "likesLeaveHome":true,
   "likesSport":true,
   "likesCulture":true,
   "likesTraveling":true
   ...
}
Run Code Online (Sandbox Code Playgroud)