Gson——如何用@SerializedName改变字段的命名

2016-08-30  本文已影响1533人  签到钱就到

原文链接:Gson Model Annotations — How to Change the Naming of Fields with @SerializedName

作者:Norman Peitek

翻译:签到钱就到

上篇Gson的博客,我们介绍了第一个模型注释@Expose去控制哪个属性(反)序列化。这篇文章中,我们介绍另一个注释。如果你想要学习如何用@SerializedName改变映射的名字,请继续阅读!

当然,这不是我们Gson系列里唯一的一篇文章,如果你对其他的主题感兴趣,可以看一下我们的大纲:

Gson系列概览

  1. 用java-JSON实现序列化合反序列化
  2. 嵌套对象的映射
  3. 数组和列表对象的映射
  4. Map的映射
  5. Set的映射
  6. 空值的映射
  7. Gson 模型注释 — 如何忽略用@Expose标记的字段
  8. Gson 模型注释 — 如何用@SerializedName改变字段的命名
  9. Gson Builder — Basics & Naming Policies
  10. Gson Builder — Force Serialization of null Values
  11. Gson Builder — Exclusion Strategies
  12. Gson Builder — Relax Gson with Lenient
  13. Gson Builder — Special Values of Floats & Doubles
  14. Gson Builder — Model Versioning
  15. Gson Builder — Formatting of Dates & Custom Date/Time Mapping
  16. Gson Builder — Pretty Printing
  17. 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

上一篇 下一篇

猜你喜欢

热点阅读