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

Gson 模型注解 — 如何使用 @SerializedName 更改字段的命名

然后我们使用 @SerializeName 注解

public class UserSimple {  
    @SerializedName("fullName")
    String name;
    String email;
    boolean isDeveloper;
    int age;
}

再次运行调试,我们可以看到 userObject 的 name 字段正常映射。

Gson 模型注解 — 如何使用 @SerializedName 更改字段的命名