🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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 类**中的成员字段的问题。 学习愉快!