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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容