Gson @SerializedName

Gson @SerializedName

原文: https://howtodoinjava.com/gson/gson-serializedname/

在此 Gson @SerializedName示例中,学习在序列化反序列化过程中,如何更改 json 和 java 对象之间的字段名称。

1. @SerializedName

默认情况下,我们假设 Java 模型类和 JSON 将具有完全相同的字段名称。 但有时情况并非如此,某些名称有所不同。 现在我们必须将 json 中的someName映射到 Java 类中的someOtherName。 这是@SerializedName注解提供帮助的地方。

@SerializedName注解指示应将带注解的成员序列化为 JSON,并使用提供的名称值作为其字段名称。 此注解将覆盖可能已经使用GsonBuilder类的所有FieldNamingPolicy,包括默认字段命名策略。

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

1.1 注解属性

它接受两个属性:

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

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

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

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

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

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

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

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

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

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

程序输出。

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

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

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

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

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);

程序输出:

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

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

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

学习愉快!