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

时间:2016-11-16 22:20:42

标签: json gson converter

Google的Gson.toJson(Object src)没有转换布尔值。 例如,My 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" }
即使有值,也会丢失

布尔值。

1 个答案:

答案 0 :(得分:1)

仅当字段定义为transientstatic时,Gson才会对字段进行序列化。

如果您还没有将布尔字段定义为静态或瞬态,则json应该具有该字段。

我不确定您是如何使用isTeen()方法将值设置为布尔字段的。它应该给出编译错误,除非你有非平凡的"是"布尔字段的方法。 "是"方法基本上相当于" 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。