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

原文链接: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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容