原文鏈接:Gson Model Annotations — How to Change the Naming of Fields with @SerializedName原文出自:Norman Peitek譯者:無(wú)名無(wú)
在之前的 Gson 系列博客文章中,我們介紹過了第一個(gè)用來(lái)控制屬性序列化和反序列化的注解 @Expose ,在這篇文章中,我們將介紹下一個(gè)更改名稱映射的注解 @SerializedName,請(qǐng)繼續(xù)閱讀。
注解 @SerializedName
除了之前博客介紹過的 @Expose 注解,@SerializedName 是另一個(gè)非常實(shí)用的注解。@SerializedName 注解更改了自動(dòng)匹配 JSON 字段的方式,平時(shí)開發(fā)中,我們總是默認(rèn)保持 Java 類屬性字段名和 JSON 的字段是一一對(duì)應(yīng),可有使用并不是總是這樣的情況,也許你沒有訪問繼承 Java 類或者你必須遵守公司的命名規(guī)則,這就需要使 @SerializedName 注解來(lái)匹配 Gson 字段,是一種非常優(yōu)雅的方式。
來(lái)看一個(gè)例子:
public class UserSimple { String name; String email; boolean isDeveloper; int age;}
如果沒有使用 @Expose, UserSimple 類中的字段將都會(huì)被一一被映射。
但是,假設(shè)有一刻 API 發(fā)生改變導(dǎo)致返回的 JSON 數(shù)據(jù)格式發(fā)生更改,接口返回了 "fullName" 而不是"name"。
{ "age": 26, "email": "norman@futurestud.io", "fullName": "Norman", "isDeveloper": true}
不用擔(dān)心,我們不要改動(dòng)任何代碼,我們只需要給類中改變的字段添加注解即可。
public class UserSimple { @SerializedName("fullName") String name; String email; boolean isDeveloper; int age; }
使用 Gson 進(jìn)行注解,并在此運(yùn)行,這就是是使用注解自動(dòng)匹配的好處。
當(dāng)然,你可以使用注解 @SerializedName 方式來(lái)保證命名規(guī)范,同時(shí)又可以正常映射接口字段,如果你的接口字段和命名規(guī)則差別很大,使用@SerializedName 注解來(lái)解決還是有必要的。
目標(biāo)
學(xué)會(huì)使用注解 @SerializedName 來(lái)自定義影射規(guī)則。下一篇我們將討論關(guān)于屬性和映射命名問題。
練習(xí)代碼已上傳 Github https://github.com/whiskeyfei/Gson-Review 可自行查看。
Gson 系列文章翻譯回顧
1、Gson - Java-JSON 序列化和反序列化入門2、Gson - 映射嵌套對(duì)象3、Gson - Arrays 和 Lists 映射對(duì)象4、Gson - Map 結(jié)構(gòu)映射5、Gson - Set 集合映射6、Gson - 空值映射7、Gson Model Annotations - 如何使用 @SerializedName 更改字段命名8、Gson Model Annotations - @SerializedName 匹配多個(gè)反序列化名稱9、Gson Builder - 基礎(chǔ)和命名規(guī)則10、Gson Builder - 序列化空值11、Gson Builder - 忽略策略12、Gson Builder - Gson Lenient 屬性13、Gson Builder - 特殊類型 Floats & Doubles17、Gson Builder - 如何使用 @Expose 忽略字段19、Gson Advanced - 映射枚舉類型20、Gson Advanced - 映射循環(huán)引用21、Gson Advanced - 泛型22、Gson Advanced - 簡(jiǎn)單自定義序列化 (Part 1)24、Gson Advanced - 自定義反序列化基礎(chǔ)25、Gson Advanced - 自定義對(duì)象實(shí)例創(chuàng)建26、Gson Advanced - 通過 @JsonAdapter 自定義(反)序列化過程32、Practical Gson - 如何解析多態(tài)對(duì)象