Android Gson详解(三)
来源:互联网 发布:win10输入法云计算 编辑:程序博客网 时间:2024/06/06 02:25
一、字段过滤的几种方法
1)基于@Expose注解
@Expose提供了两个属性,且都有默认值,开发者可以根据需要设置不同的值。
使用方法: 简单说来就是需要导出的字段上加上@Expose 注解,不导出的字段不加。注意是不导出的不加。
@Expose //@Expose(deserialize = true,serialize = true) //序列化和反序列化都都生效@Expose(deserialize = true,serialize = false) //反序列化时生效@Expose(deserialize = false,serialize = true) //序列化时生效@Expose(deserialize = false,serialize = false) // 和不写一样
注:根据上面的图片可以得出,所有值为true的属性都是可以不写的。
2)基于版本
Gson在对基于版本的字段导出提供了两个注解 @Since 和 @Until,和GsonBuilder.setVersion(Double)配合使用。@Since 和 @Until都接收一个Double值。
Since和Until注解
使用方法:当前版本(GsonBuilder中设置的版本) 大于等于Since的值时该字段导出,小于Until的值时该该字段导出。
class SinceUntilSample { @Since(4) public String since; @Until(5) public String until;}public void sineUtilTest(double version){ SinceUntilSample sinceUntilSample = new SinceUntilSample(); sinceUntilSample.since = "since"; sinceUntilSample.until = "until"; Gson gson = new GsonBuilder().setVersion(version).create(); System.out.println(gson.toJson(sinceUntilSample));}//当version <4时,结果:{"until":"until"}//当version >=4 && version <5时,结果:{"since":"since","until":"until"}//当version >=5时,结果:{"since":"since"}
注:当一个字段被同时注解时,需两者同时满足条件。
3)基于策略(自定义规则)
上面介绍的了2种排除字段的方法,说实话我除了@Expose以外,其它的都是只在Demo用上过,用得最多的就是马上要介绍的自定义规则,好处是功能强大、灵活,缺点是相比其它3种方法稍麻烦一点,但也仅仅只是想对其它3种稍麻烦一点而已。
基于策略是利用Gson提供的ExclusionStrategy接口,同样需要使用GsonBuilder,相关API 2个,分别是addSerializationExclusionStrategy 和addDeserializationExclusionStrategy 分别针对序列化和反序化时。这里以序列化为例。
例如:
Gson gson = new GsonBuilder() .addSerializationExclusionStrategy(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes f) { // 这里作判断,决定要不要排除该字段,return true为排除 if ("finalField".equals(f.getName())) return true; //按字段名排除 Expose expose = f.getAnnotation(Expose.class); if (expose != null && expose.deserialize() == false) return true; //按注解排除 return false; } @Override public boolean shouldSkipClass(Class<?> clazz) { // 直接排除某个类 ,return true为排除 return (clazz == int.class || clazz == Integer.class); } }) .create();
阅读全文
0 0
- Android Gson详解(三)
- Android GSON详解(一)
- Android Gson详解(二)
- Android Gson详解(四)
- Android-Gson详解
- Android-Gson使用详解
- Android Gson解析json详解
- Android Gson解析json详解
- Gson解析(详解)
- 详解Gson使用(三)使用注解
- Android中Gson解析详解json
- Android 使用Gson解析json案例详解
- Android中Gson解析详解json2
- Android中Gson解析详解json3
- Android 使用Gson解析json案例详解
- Android 使用Gson解析json案例详解
- Gson详解
- Gson详解
- 1操作系统了解
- 华为交换五部曲——S系列交换机组播特性入门_V1.0_D
- 内网的ip
- java-运算符
- 用maven项目mybatis集成spring+springmvc无刷新实现crud
- Android Gson详解(三)
- Hdu 1760 A New Tetris Game sg函数博弈
- 【dp】51nod 1201 整数划分
- spring的@Transactional注解详细用法
- 表达式前后缀表达形式
- Neither BindingResult nor plain target object for bean name 'command' available as request attribute
- Android Stuido中代码自动对齐快捷键
- shiro的RequiresPermissions注解使用
- VS-CUDA开启OpenMP支持