Gson 模型注解 — 如何使用 @SerializedName 更改字段的命名
在这篇文章中,我们将介绍下一个注解。 如果想了解如何使用 @SerializedName
更改名称映射,请继续阅读下面的内容!
当然,这不会是我们 Gson 系列中的唯一一篇文章。 后续我们还会继续介绍 Gson 的其他知识点:
模型注解 @SerializedName
除了 @Expose
(我们会在其他文章中介绍该注解),@SerializedName
是另一个非常有用的注解。 @SerializedName
更改与 JSON 之间的自动匹配。 到目前为止,我们一直假设 Java 模型类和 JSON 具有相同的命名。 不幸的是,情况并非总是如此。 也许我们无法访问继承的 Java 模型类,或者必须遵守公司命名策略,无论哪种情况,我们都可以使用 @SerializedName
使 Gson 的匹配仍然可以正常工作。
让我们看一个例子。 我们的 UserSimple 类在没有 @Expose 的情况下恢复到原来的形式,所有东西都被映射了。
public class UserSimple {
String name;
String email;
boolean isDeveloper;
int age;
}
但是,让我们假设 API 实现以及返回的 JSON 已更改。 我们的 API 不再返回 name,而是返回 fullName:
{
"age": 26,
"email": "jiyik_onmpw@163.com",
"fullName": "jiyik",
"isDeveloper": true
}
不用担心,我们甚至不需要更改任何代码库,只需在模型中添加一个简单的注解:
public class UserSimple {
@SerializedName("fullName")
String name;
String email;
boolean isDeveloper;
int age;
}
使用注解 Gson 的映射再次起作用,我们可以继续享受自动化的好处 :)
当然,我们可以使用 @SerializedName
作为一种符合公司命名策略的方式,同时也可以正确映射到任何 API。 如果命名策略有很大不同,这种方式将对我们非常有帮助。
下面我们进行一个验证,首先不使用 @SerializeName
注解
public class UserSimple {
String name;
String email;
boolean isDeveloper;
int age;
}
用于验证的代码如下
String userJson = "{'age':26,'email':'jiyik_onmpw@163.com','isDeveloper':true,'fullName':'jiyik'}";
Gson gson = new Gson();
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
通过调试,我们可以看到 userObject
的 name 字段为 null
然后我们使用 @SerializeName
注解
public class UserSimple {
@SerializedName("fullName")
String name;
String email;
boolean isDeveloper;
int age;
}
再次运行调试,我们可以看到 userObject
的 name 字段正常映射。