Gson.toJson 不从对象转换布尔值

Gson.toJson not converting boolean values from object

Google 的 Gson.toJson(Object src) 不转换布尔值。 例如,我的 Java 对象是说:

class MyObj { 
    private String name;
    private boolean teen;

    //getter,setter ommitted...
  }

MyObj obj = new MyObj();
obj.setName("Me");
obj.isTeen(false);

Gson.toJson(obj);

在转换这个对象时它是这样写的

MyObj { "name" : "Me" }

虽然有一个值,但缺少布尔值。

仅当字段定义为 transientstatic.

时,Gson 才不会序列化这些字段

如果您尚未将布尔字段定义为静态或瞬态,json 应该有该字段。

我不确定您是如何使用 isTeen() 方法将值设置为布尔字段的。它应该给出编译错误,除非你对布尔字段有非平凡的 "is" 方法。 "is" 方法基本上等同于 String/other 字段的 "get" 方法。通常,它不会用于设置值。

我刚刚提供了带有 getter 和 setter 的完整代码。请检查这是否有效。

public class MyObj {

    private String name;

    private boolean teen;
    public String getName() {
        return name;
    }
    public boolean isTeen() {
        return teen;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setTeen(boolean teen) {
        this.teen = teen;
    }
}

主要方法:-

public static void main(String[] args) {

        Gson gson = new Gson();

        MyObj obj = new MyObj();
        obj.setName("Me");
        obj.setTeen(false);

        System.out.println(gson.toJson(obj));
    }

输出:-

{"name":"Me","teen":false}

有趣的一点是,即使你没有为布尔字段设置任何值。它将采用默认值 false 并且生成的 JSON 将具有 false.