原文链接:Gson Model Annotations — How to Change the Naming of Fields with @SerializedName
翻译:签到钱就到
上篇Gson的博客,我们介绍了第一个模型注释@Expose
去控制哪个属性(反)序列化。这篇文章中,我们介绍另一个注释。如果你想要学习如何用@SerializedName
改变映射的名字,请继续阅读!
当然,这不是我们Gson系列里唯一的一篇文章,如果你对其他的主题感兴趣,可以看一下我们的大纲:
Gson系列概览
- 用java-JSON实现序列化合反序列化
- 嵌套对象的映射
- 数组和列表对象的映射
- Map的映射
- Set的映射
- 空值的映射
- Gson 模型注释 — 如何忽略用@Expose标记的字段
- Gson 模型注释 — 如何用@SerializedName改变字段的命名
- Gson Builder — Basics & Naming Policies
- Gson Builder — Force Serialization of null Values
- Gson Builder — Exclusion Strategies
- Gson Builder — Relax Gson with Lenient
- Gson Builder — Special Values of Floats & Doubles
- Gson Builder — Model Versioning
- Gson Builder — Formatting of Dates & Custom Date/Time Mapping
- Gson Builder — Pretty Printing
- Gson Builder — HTML Escaping
模型注释 @SerializedName
除了上篇博客里提到的@Expose
,@SerializedName
是另一个非常有用的注释。@SerializedName
改变了从或到JSON数据的自动匹配。到目前为止,我们总是假设Java模型类和JSON有同样的名字。不幸地,情况不总是那样,也许你没有继承Java模型类,或者你已经确认符合命名规则,在这两种情况下你可以使用@SerializedName
,Gson匹配仍然奏效。
一起来看个例子,我们的UserSimple
类回到它没有使用@Expose
的原始状态,所有东西都被映射了。
public class UserSimple {
String name;
String email;
boolean isDeveloper;
int age;
}
然后,假设一分钟后,返回的JSON API实现已经改变了。我们的API不再返回name
,它返回fullName
:
{
"age": 26,
"email": "norman@futurestud.io",
"fullName": "Norman",
"isDeveloper": true
}
不用担心,我们甚至不用改变我们的基本代码,我们只需为我们的模型添加一个简单的注释:
public class UserSimple {
@SerializedName("fullName")
String name;
String email;
boolean isDeveloper;
int age;
}
用了这个注释后,Gson的映射又工作了,我们可以享受注释带来的好处:)
当然,你可以使用@SerializedName
作为一个方式去兼容你的团队命名规则,但是也有正确的映射到任何API。当命名策略发生变化,这将非常有用。
展望
在这篇博客中,你已经学会了如何使用@SerializedName
去自定义名字映射。我们会在下篇博客中回到相同主题的属性和映射命名。我们会研究更通用的配置策略,敬请期待!
如果你需要反馈或有疑问,在评论中让我们知道或twitter @futurestud_io。
网友评论