Gson 模型注解 — 如何使用 @SerializedName 更改字段的命名
在这篇文章中,我们将介绍下一个注解。 如果想了解如何使用 @SerializedName
更改名称映射,请继续阅读下面的内容!
当然,这不会是我们 Gson 系列中的唯一一篇文章。 后续我们还会继续介绍 Gson 的其他知识点:
模型注解 @SerializedName
除了 @Expose
(我们会在其他文章中介绍该注解),@SerializedName
是另一个非常有用的注解。 @SerializedName
更改与 JSON 之间的自动匹配。 到目前为止,我们一直假设 Java 模型类和 JSON 具有相同的命名。 不幸的是,情况并非总是如此。 也许我们无法访问继承的 Java 模型类,或者必须遵守公司命名策略,无论哪种情况,我们都可以使用 @SerializedName
使 Gson 的匹配仍然可以正常工作。
让我们看一个例子。 我们的 UserSimple 类在没有 @Expose 的情况下恢复到原来的形式,所有东西都被映射了。
public class UserSimple {
String name;
String email;
boolean isDeveloper;
int age;
}
但是,让我们假设 API 实现以及返回的 JSON 已更改。 我们的 API 不再返回 name,而是返回 fullName:
{
"age": 26,
"email": "jiyik_onmpw@163.com",
"fullName": "jiyik",
"isDeveloper": true
}
不用担心,我们甚至不需要更改任何代码库,只需在模型中添加一个简单的注解:
public class UserSimple {
@SerializedName("fullName")
String name;
String email;
boolean isDeveloper;
int age;
}
使用注解 Gson 的映射再次起作用,我们可以继续享受自动化的好处 :)
当然,我们可以使用 @SerializedName
作为一种符合公司命名策略的方式,同时也可以正确映射到任何 API。 如果命名策略有很大不同,这种方式将对我们非常有帮助。
下面我们进行一个验证,首先不使用 @SerializeName
注解
public class UserSimple {
String name;
String email;
boolean isDeveloper;
int age;
}
用于验证的代码如下
String userJson = "{'age':26,'email':'jiyik_onmpw@163.com','isDeveloper':true,'fullName':'jiyik'}";
Gson gson = new Gson();
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
通过调试,我们可以看到 userObject
的 name 字段为 null
然后我们使用 @SerializeName
注解
public class UserSimple {
@SerializedName("fullName")
String name;
String email;
boolean isDeveloper;
int age;
}
再次运行调试,我们可以看到 userObject
的 name 字段正常映射。
相关文章
Gson 通过@JsonAdapter 自定义(反)序列化
发布时间:2022/07/24 浏览次数:217 分类:编程语言
-
在这篇文章中,我们将展示如何简化(反)序列化的自定义。 所有这些选项都只能通过自定义 Gson 实例和一些样板代码获得。 Gson 2.7 引入了一个简单的注解,我们可以节省大量代码并获
Gson 自定义反序列化基础
发布时间:2022/07/21 浏览次数:81 分类:编程语言
-
在这篇文章中,我们将了解如何实现自定义 Gson 反序列化。 如果服务器以与客户端的应用程序数据模型不匹配的格式向我们发送数据,请继续阅读!
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 格式的对象列表。 到目前为止,这没有什么不寻常的,也不是问题。 然而,问题是对象是多态的,需要解析子类特定的字段。 以