原文鏈接:Gson Model Annotations — How to Change the Naming of Fields with @SerializedName
翻譯:簽到錢就到
上篇Gson的博客,我們介紹了第一個模型注釋@Expose
去控制哪個屬性(反)序列化。這篇文章中,我們介紹另一個注釋。如果你想要學習如何用@SerializedName
改變映射的名字,請繼續閱讀!
當然,這不是我們Gson系列里唯一的一篇文章,如果你對其他的主題感興趣,可以看一下我們的大綱:
Gson系列概覽
- 用java-JSON實現序列化合反序列化
- 嵌套對象的映射
- 數組和列表對象的映射
- Map的映射
- Set的映射
- 空值的映射
- Gson 模型注釋 — 如何忽略用@Expose標記的字段
- Gson 模型注釋 — 如何用@SerializedName改變字段的命名
- Gson Builder — Basics & Naming Policies
- Gson Builder — Force Serialization of null Values
- Gson Builder — Exclusion Strategies
- Gson Builder — Relax Gson with Lenient
- Gson Builder — Special Values of Floats & Doubles
- Gson Builder — Model Versioning
- Gson Builder — Formatting of Dates & Custom Date/Time Mapping
- Gson Builder — Pretty Printing
- 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。