# Gson `@SerializedName`

> 原文： [https://howtodoinjava.com/gson/gson-serializedname/](https://howtodoinjava.com/gson/gson-serializedname/)

在此 Gson `@SerializedName`示例中，学习在[序列化](https://howtodoinjava.com/java/serialization/a-mini-guide-for-implementing-serializable-interface-in-java/)和[反序列化](https://howtodoinjava.com/java/serialization/how-deserialization-process-happen-in-java/)过程中，如何更改 json 和 java 对象之间的字段名称。

## 1\. `@SerializedName`

默认情况下，我们假设 Java 模型类和 JSON 将具有完全相同的字段名称。 但有时情况并非如此，某些名称有所不同。 现在我们必须将 json 中的`someName`映射到 Java 类中的`someOtherName`。 这是[`@SerializedName`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/annotations/SerializedName.html)注解提供帮助的地方。

`@SerializedName`注解指示应将带注释的成员序列化为 JSON，并使用提供的名称值作为其字段名称。 此注释将覆盖可能已经使用`GsonBuilder`类的所有[`FieldNamingPolicy`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/FieldNamingPolicy.html)，包括默认字段命名策略。

请注意，您在此注解中指定的值必须是有效的 JSON 字段名称。

#### 1.1 注释属性

它接受两个属性：

*   `value` – 序列化或反序列化时所需的字段名称。
*   `alternate` – 反序列化字段时的备用名称。 除了`value`属性以外，它还提供更多可能的名称。 如果有多个字段匹配一个属性，则 Gson 将使用最后处理的那个。

> 请记住，具有多个名称的`alternate`选项仅限于反序列化。 在序列化中，不会有任何影响。

## 2.在序列化期间更改字段名称

让我们以仅具有 4 个字段的`Employee`类为例。 我们要创建 JSON，其中`"email"`被写为字段名`"emailId"`。

```java
public class Employee 
{
	private Integer id;
    private String firstName;
    private String lastName;

    @SerializedName(value = "emailId", alternate = "emailAddress")
    private String email;
}

```

让我们序列化一个员工记录并查看 JSON 输出。

```java
Employee emp = new Employee(1001, "Lokesh", "Gupta", "howtodoinjava@gmail.com");

Gson gson = new GsonBuilder().setPrettyPrinting().create();  

System.out.println(gson.toJson(emp));

```

程序输出。

```java
{
  "id": 1001,
  "firstName": "Lokesh",
  "lastName": "Gupta",
  "emailId": "howtodoinjava@gmail.com"
}

```

## 3.在反序列化期间更改字段名称

Java 程序，用于在将 JSON 反序列化为 Java 类的过程中映射不同的字段名称。

```java
{
  "id": 1001,
  "firstName": "Lokesh",
  "lastName": "Gupta",
  "email": "howtodoinjava@gmail.com",
  "emailAddress": "admin@gmail.com"
}

```

```java
String json = "{'id': 1001,"
		+ "'firstName': 'Lokesh',"
		+ "'lastName': 'Gupta',"
		+ "'email': 'howtodoinjava@gmail.com',"
		+ "'emailAddress': 'admin@gmail.com'}";

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 

Employee emp = gson.fromJson(json, Employee.class);

System.out.println(emp);

```

程序输出：

```java
Employee [id=1001, firstName=Lokesh, lastName=Gupta, email=admin@gmail.com]

```

注意程序输出。 我们在*电子邮件*字段（即`email`和`emailAddress`）中有两个匹配项。 最后一次出现是`"emailAddress"`，因此它的值已填充到`Employee`对象中。

让我问一下有关**使用 Gson `@SerializedName`注解将多个不同名称映射到 Java 类**中的成员字段的问题。

学习愉快！