1. 程式人生 > >Gson教程九(譯):強制序列化null值

Gson教程九(譯):強制序列化null值

該文章翻譯自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序列化值為空的屬性。

在下一篇部落格中,我們將向你展示如何自定義選擇哪些域可以序列化和反序列化。