1. 默认情况下, GSON从序列化/反序列化过程中排除瞬态和静态字段。
2. 例子
2.1. 新建一个名为GsonExcludeFields的Java项目, 同时添加相关jar包。
2.2. 新建Student.java
package com.fj.ef; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class App1 { public static void main(String[] args) { // 创建一个学生对象 Student student = new Student(1111, "小明", 21); Student.className = "VI"; // 1. Gson构造器 GsonBuilder builder = new GsonBuilder(); // 2. 格式良好的输出 builder.setPrettyPrinting(); // 3. 创建Gson对象 Gson gson = builder.create(); // 4. JavaBean转化为JSON字符串 String jsonString = gson.toJson(student); System.out.println(jsonString); } }
2.3. 新建App1.java
- package com.fj.ef;
- import com.google.gson.annotations.Expose;
- public class Student {
- @Expose
- private transient int id;
- @Expose
- private String name;
- private int age;
- @Expose
- public static String className;
- public Student() {
- }
- public Student(int id, String name, int age) {
- this.id = id;
- this.name = name;
- this.age = age;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String toString() {
- return "Student [name: " + name + ", age: " + age + "]";
- }
- }
2.4. 运行App1.java
3. 使用excludeFieldsWithModifiers
3.1. GsonBuilder使用来自序列化/反序列化过程的excludeFieldsWithModifiers()方法控制排除使用特定修饰符的字段。
3.2. 新建App2.java
- package com.fj.ef;
- import java.lang.reflect.Modifier;
- import com.google.gson.Gson;
- import com.google.gson.GsonBuilder;
- public class App2 {
- public static void main(String[] args) {
- // 创建一个学生对象
- Student student = new Student(1111, "小明", 21);
- Student.className = "VI";
- // 1. Gson构造器
- GsonBuilder builder = new GsonBuilder();
- // 2. 排除使用特定修饰符的字段
- builder.excludeFieldsWithModifiers(Modifier.TRANSIENT);
- // 3. 格式良好的输出
- builder.setPrettyPrinting();
- // 4. 创建Gson对象
- Gson gson = builder.create();
- // 5. JavaBean转化为JSON字符串
- String jsonString = gson.toJson(student);
- System.out.println(jsonString);
- }
- }
3.3. 运行App2.java
4. 使用@Expose Annotation
4.1. Gson提供@Expose注解根据其修饰范围来控制类的序列化/反序列化。
4.2. GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法来指示只有@Expose修饰的字段才进行序列化/反序列化。瞬态和静态字段即使使用@Expose修饰依然被排除。
4.3. 新建App3.java
- package com.fj.ef;
- import com.google.gson.Gson;
- import com.google.gson.GsonBuilder;
- public class App3 {
- public static void main(String[] args) {
- // 创建一个学生对象
- Student student = new Student(1111, "小明", 21);
- Student.className = "VI";
- // 1. Gson构造器
- GsonBuilder builder = new GsonBuilder();
- // 2. 只序列化/反序列化使用@Expose修饰的字段, 瞬态和静态字段即使使用@Expose修饰依然被排除
- builder.excludeFieldsWithoutExposeAnnotation();
- // 3. 格式良好的输出
- builder.setPrettyPrinting();
- // 4. 创建Gson对象
- Gson gson = builder.create();
- // 5. JavaBean转化为JSON字符串
- String jsonString = gson.toJson(student);
- System.out.println(jsonString);
- }
- }
4.4. 运行App3.java
联系客服