前言

在很多时候,我们在序列化/反序列化 json对象的时候,需要排除部份字段,比如用户相关的json,对于密码等,我们就不应该序列化提供出去,这时候就有必要进行下处理了。

使用@Expose注解

我们可以先看看@Expose的定义,如果我们想某个字段不想被序列化,我们可以将serialize设置为false,对应的deserialize表示反序列化。

所以我们可以定义如下实体类

然后使用GsonBuilder来创建Gson对象。

这样我们就得到的json字符串中就不会包含passWord字段了。同样的,如果将json字符串反序列化为对象时需要排除某些字段,我们将deserialize设置为false即可。

通过上面我们可以知道,使用@Expose注解排除字段我们需要在所有需要序列化的字段上面使用注解,不使用注解的字段同样不会被序列/反序列化。使用注解以后就可以使用serialize/deserialize控制。然后使用GsonBuilder来生成Gson对象并调用builder.excludeFieldsWithoutExposeAnnotation().

使用@Expose注解很明显可以看到,如果我们有很多字段,但是只有某些字段不需要序列化/反序列化(这种情况是大多数),使用@Expose是很复杂的。所以我介绍下面一种更加灵活的方式。

使用ExclusionStrategy接口

同样的,我们来看看ExclusionStrategy接口的定义,有两个方法,分别代表字段以及字段类型,我们可以通过这两个方法用来定义自己的规则,用来过滤掉指定的字段名或者指定类型的字段。返回true。则表示跳过此字段。

下面的ExclusionStrategy将会屏蔽掉address字段。

下面的ExclusionStrategy将会屏蔽掉String类型。

然后类似于@Expose,我们也需要使用GsonBuilder来创建Gson对象。

setExclusionStrategies方法设置,会对序列化/反序列化都生效

addSerializationExclusionStrategy() 只对序列化生效

addDeserializationExclusionStrategy()只对反序列化生效。

最后修改日期: 2018年8月9日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。