Gson教程九(譯):強制序列化null值
阿新 • • 發佈:2019-02-16
該文章翻譯自Gson Tutorial Series系列教程。該篇主要闡述了強制序列化null值。
在上一篇部落格中,我們已經向你展示了GsonBuilder的基礎。GsonBuilder可以用於自定義Gson的行為,從而影響序列化和反序列化的方方面面。在這篇部落格中,你將學會如何使用強制Gson序列化空值。
空值的序列化
還記得之前釋出的關於空值對映的部落格嗎?它通過很多例子向我們展示了,當值為空時Gson是如何行為的。如果你還沒有閱讀,你或許可以移步到那篇部落格獲取有價值的資訊。如果你很心急,我們直接告訴你要點:當屬性的值設為空時將不會被序列化。
忽略空值這一行為對於減少JSON字串的體積來說通常是個好主意。然而,並不總是如此。有些API會強制要求該域存在或者null
Gson為改變這一預設的行為提供了選擇。我們可以使用GsonBuilder來為序列化提供null值。如果你還不熟悉GsonBuilder,請閱讀上一篇部落格。
我們複用之前部落格中的UserSimple模型。
public class UserSimple {
String name;
String email;
boolean isDeveloper;
int age;
}
現在,我們為其建立一個email為空的使用者例項。
Gson gson = new Gson(); UserSimple user = new UserSimple("Norman", null, 26, true); String usersJson = gson.toJson(user);
預設設定下,email屬性將不會在JSON結果中出現:
{
"age": 26,
"isDeveloper": true,
"name": "Norman"
}
如果你要求email域作為JSON的一部分,你需要呼叫GsonBuilder的.serializeNulls()方法。如果你這樣做了,Gson將會序列化所有屬性,即使屬性設定為空:
GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.serializeNulls(); Gson gson = gsonBuilder.create(); UserSimple user = new UserSimple("Norman", null, 26, true); String usersJson = gson.toJson(user);
usersJson現在包括email域了:
{
"age": 26,
"email": null,
"isDeveloper": true,
"name": "Norman"
}
前瞻
在這篇部落格中你已經學會了如何強制Gson序列化值為空的屬性。
在下一篇部落格中,我們將向你展示如何自定義選擇哪些域可以序列化和反序列化。