Gson序列化和反序列化实体中部分属性
本文记录的是使用Gson如何序列化和反序列化实体中部分属性,有两种方式,使用transient
和使用注解@Expose
.
默认情况下,如果使用transient
标注属性,那个该属性在序列化和反序列化时就会被屏蔽。同样地,如果属性声明为static
类型,那么该属性也会被屏蔽.
如下示例所示:
Student对象:
1 | public class Student { |
序列化代码如下:
1 | Gson gson = new Gson(); |
控制台属性log如下:
1 | json_string: [{"stuNo":1,"name":"cici"},{"stuNo":2,"name":"didi"}] |
正如所期望的不包含Student
实例中sex
属性.
现在,假定有这么个需求,需要将实体中的transient
属性序列化,而不需要将static
属性序列化,这该怎么办呢?看下面的示例:
1 | public class Student { |
使用如下方法序列化将会屏蔽static
属性,而transient
属性则会正常序列化:
1 | Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.STATIC).create(); |
如果你想屏蔽static
和transient
属性,可采取如下方式或者使用Gson的默认创建方式:
1 | Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT).create(); |
你可添加任意多个 Modifier
常量到
excludeFieldsWithModifiers
方法中.
使用@Expose
注解可以将那些不需要序列化和反序列化的属性屏蔽,这样的话必须使用new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
创建Gson实例,该实例将会屏蔽实体中所有没有使用@Expose
注解的属性,也就是说,只有使用了@Expose
注解的属性才会被序列化和反序列化.
示例如下所示:
1 | public class Student { |
序列化Student对象的代码如下:
1 | Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); |
正如所期望的,控制台输出的序列化字符串中只包含Student
实例中的name
属性如下:
1 | json_string: [{"name":"cici"},{"name":"didi"}] |
参考:
目前已转行教育行业,欢迎加微信交流:CaryaLiu