【问题标题】:default value while serialize/deserialize json/object using GSON使用 GSON 序列化/反序列化 json/对象时的默认值
【发布时间】:2014-10-06 09:27:35
【问题描述】:

我正在使用 GSON 为我的一个应用程序序列化和反序列化 JSON/JAva 对象。我正在使用 serializeNulls,因为我的一些值需要作为 null 发送到 Web 服务,而有些我不想为 NULL。因此,我在不需要 null 的 setter/getter 中尝试了检查该值是否为 null,如果它为 null,则为其设置 "" 空白。但是当我使用 gson.toJson() 方法将我的对象反序列化为 json 时,它仍然为我提供了 null 值。

private String mID;

public void setId(final String id) {
    if(id == null) {
        id = "";
    }
    mID = id;
}

public String getId() {
    if(mID == null) {
        mID = "";
    }
    return mID;
}

Gson gson = new GsonBuilder().serializeNulls().create();

知道如何避免某些字段为 null 并使用 setter/getter 方法或其他方式设置空白“”。

【问题讨论】:

  • Gson 不使用 getter 来访问要序列化的字段。只要确保 mID 永远不会为空。您在 setter 中确定了这一点,但也许您有一个构造函数或其他方法将其设置(或保留)为 null。

标签: java serialization gson deserialization json-deserialization


【解决方案1】:

您可以使用mID 的默认值和适当的setter 方法来实现

示例代码:

class MyId{
    private String mID="";

    public void setId(final String id) {
        if(id != null) {
            mID = id;
        }
    }

    public String getId() {
        return mID;
    }
}

...
//JSON string to Object
MyId myId=new Gson().fromJson("{}", MyId.class);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(myId));

...
// Object to JSON string
MyId myId = new MyId();
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(myId));

输出:

{
   "mID": ""
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2017-07-31
    相关资源
    最近更新 更多