美文网首页
Gson——如何用@SerializedName改变字段的命名

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

作者: 签到钱就到 | 来源:发表于2016-08-30 19:51 被阅读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

    相关文章

      网友评论

          本文标题:Gson——如何用@SerializedName改变字段的命名

          本文链接:https://www.haomeiwen.com/subject/yowfettx.html