迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Gson Builder 强制序列化 NULL 值

作者:迹忆客 最近更新:2023/02/01 浏览次数:

在之前的文章中,我们介绍了 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 值的属性。

在接下来的文章中,我们将向介绍自定义哪些模型字段被(反)序列化的方法。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Gson 通过@JsonAdapter 自定义(反)序列化

发布时间:2022/07/24 浏览次数:217 分类:编程语言

在这篇文章中,我们将展示如何简化(反)序列化的自定义。 所有这些选项都只能通过自定义 Gson 实例和一些样板代码获得。 Gson 2.7 引入了一个简单的注解,我们可以节省大量代码并获

Gson 自定义反序列化基础

发布时间:2022/07/21 浏览次数:81 分类:编程语言

在这篇文章中,我们将了解如何实现自定义 Gson 反序列化。 如果服务器以与客户端的应用程序数据模型不匹配的格式向我们发送数据,请继续阅读!

Gson 泛型映射

发布时间:2022/07/19 浏览次数:234 分类:编程语言

在这篇文章中,我们将探讨 Gson 如何处理 Java 泛型。 泛型对于任何数据映射库都是一个挑战,因为它们带来了不确定性。 如果我们想查看 Java 泛型、用例和含义,请随时阅读 Wikipedia 文

Gson 自定义实例创建器

发布时间:2022/07/14 浏览次数:121 分类:编程语言

在这篇文章中,我们将讨论自定义反序列化的另一个组件。 在过去的几篇文章中,我们探讨了如何自定义数据的序列化和反序列化。 在这两种情况下,我们都试图减轻服务器和客户端之

Gson 循环引用的映射

发布时间:2022/07/13 浏览次数:173 分类:编程语言

在这篇文章中,我们将讨论一个特别讨厌的话题:循环引用。 我们可能在计算机科学或图表数学课上听说过循环引用。 在更实际的解释中:它处理对象具有指向不同对象的嵌套属性的情

Gson Builder Floats 和 Doubles 的特殊值

发布时间:2022/07/12 浏览次数:193 分类:编程语言

在上一篇 Gson 的文章中,我们研究了使 JSON 转换降低标准的选项。 Lenient 允许传入的 JSON 在某种程度上是非标准的,Gson 仍然能够将其解析为 Java 对象。 在这篇文章中,我们将研究一个

Gson 自定义序列化

发布时间:2022/07/11 浏览次数:117 分类:编程语言

在这篇文章中,我们将探讨如何自定义 Java 对象的 Gson 序列化。 我们可能想要更改序列化的原因有很多,例如 简化我们的模型以减少发送的数据量或删除个人信息。 现在我们将通过实

Gson 映射 Enum 枚举

发布时间:2022/07/10 浏览次数:156 分类:编程语言

在之前的文章中我们介绍了如何映射嵌套对象、数组和列表、Java Map 等。 在这篇文章中,您将学习如何(反)序列化 Java 枚举 Enum。

Gson 如何反序列化多态对象列表

发布时间:2022/07/09 浏览次数:286 分类:编程语言

最近,我们遇到了一种情况,我从 REST 端点接收到 JSON 格式的对象列表。 到目前为止,这没有什么不寻常的,也不是问题。 然而,问题是对象是多态的,需要解析子类特定的字段。 以

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便