本文记录的是使用Gson如何序列化和反序列化实体中部分属性,有两种方式,使用transient和使用注解@Expose.

默认情况下,如果使用transient标注属性,那个该属性在序列化和反序列化时就会被屏蔽。同样地,如果属性声明为static类型,那么该属性也会被屏蔽. 如下示例所示:

Student对象:

1
2
3
4
5
6
7
public class Student {
private int stuNo;
private transient int sex;
private String name;

//......
}

序列化代码如下:

1
2
3
4
5
6
7
8
9
Gson gson = new Gson();
List<Student> students = new ArrayList<Student>();

Student student1 = new Student(1, 1, "cici");
Student student2 = new Student(2, 1, "didi");
students.add(student1);
students.add(student2);
String listStr = gson.toJson(students);
System.out.println("json_string: " + listStr);

控制台属性log如下:

1
json_string: [{"stuNo":1,"name":"cici"},{"stuNo":2,"name":"didi"}]

正如所期望的不包含Student实例中sex属性.

现在,假定有这么个需求,需要将实体中的transient属性序列化,而不需要将static属性序列化,这该怎么办呢?看下面的示例:

1
2
3
4
5
6
public class Student {
private int stuNo;
private int sex;
private transient String name;
private static Long schoolId = 20L;
}

使用如下方法序列化将会屏蔽static属性,而transient属性则会正常序列化:

1
Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.STATIC).create();

如果你想屏蔽statictransient属性,可采取如下方式或者使用Gson的默认创建方式:

1
Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT).create();

你可添加任意多个 Modifier 常量到 excludeFieldsWithModifiers方法中.

使用@Expose注解可以将那些不需要序列化和反序列化的属性屏蔽,这样的话必须使用new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()创建Gson实例,该实例将会屏蔽实体中所有没有使用@Expose注解的属性,也就是说,只有使用了@Expose注解的属性才会被序列化和反序列化. 示例如下所示:

1
2
3
4
5
6
public class Student {
private int stuNo;
private int sex;
@Expose
private String name;
}

序列化Student对象的代码如下:

1
2
3
4
5
6
7
8
9
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
List<Student> students = new ArrayList<Student>();

Student student1 = new Student(1, 1, "cici");
Student student2 = new Student(2, 1, "didi");
students.add(student1);
students.add(student2);
String listStr = gson.toJson(students);
System.out.println("json_string: " + listStr);

正如所期望的,控制台输出的序列化字符串中只包含Student实例中的name属性如下:

1
json_string: [{"name":"cici"},{"name":"didi"}]

参考:

Gson User Guide


目前已转行教育行业,欢迎加微信交流:CaryaLiu