在此 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]
注意程序输出。 我们在电子邮件字段(即email和emailAddress)中有两个匹配项。 最后一次出现是"emailAddress",因此它的值已填充到Employee对象中。
让我问一下有关使用 Gson @SerializedName注解将多个不同名称映射到 Java 类中的成员字段的问题。
学习愉快!
