Gson Builder 强制序列化 NULL 值
在之前的文章中中,我们介绍了 GsonBuilder 的基础知识。 GsonBuilder 可用于在(反)序列化的几个方面自定义 Gson 的行为。 在这篇文章中,我们将了解如何强制 Gson 序列化 NULL 值。
序列化 NULL 值
你还记得我们关于空值映射的文章吗? 它展示了一堆示例,当值未设置(或为null)时 Gson 的行为方式。 如果阅读到那篇文章,可能会从中获得一些价值。 大致的内容要点是当属性没有设置值或 null 作为值时,它们不会序列化。
这种忽略 null 属性的行为通常是减小生成的 JSON 字符串大小的好方法。 然而,它并不总是最好的。 一些 API 要求请求的字段存在,或者属性的 null 值实际上意味着什么(换句话说,默认值不会为 null;我们需要将其显式设置为 null)。
Gson 提供了更改此默认行为的选项。 我们将利用 GsonBuilder 来调整 null 值的序列化。 如果各位看官是 GsonBuilder 的新手,请阅读有关 GsonBuilder 基础知识 的文章。
我们将重用之前文章中的 UserSimple 模型。
public class UserSimple {
String name;
String email;
boolean isDeveloper;
int age;
}
现在,让我们创建一个没有 email 的用户实例。 我们将 null 作为 email 的值:
Gson gson = new Gson();
UserSimple user = new UserSimple("jiyik", null, 26, true);
String usersJson = gson.toJson(user);
使用默认设置,email 属性不会显示在生成的 JSON 中:
{
"age": 26,
"isDeveloper": true,
"name": "jiyik"
}
如果我们要求 email 字段是 JSON 的一部分,则需要在 GsonBuilder 上调用 .serializeNulls()
。 如果我们这样做,Gson 将序列化所有属性,即使它们为空 null:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.serializeNulls();
Gson gson = gsonBuilder.create();
UserSimple user = new UserSimple("jiyik", null, 26, true);
String usersJson = gson.toJson(user);
usersJson
现在包含 email 属性的字段:
{
"age": 26,
"email": null,
"isDeveloper": true,
"name": "jiyik"
}
在这篇文章中,我们学习了如何强制 Gson 序列化具有 null 值的属性。
在接下来的文章中,我们将向介绍自定义哪些模型字段被(反)序列化的方法。