如何实现 Gson 序列化/反序列化过程中 过滤指定字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现 Gson 序列化/反序列化过程中 过滤指定字段相关的知识,希望对你有一定的参考价值。
@Expose 有两个参数 serialize 和 deserialize,即序列化与反序列化,当不指定的时候 默认都为true ; 而且该注解只在Gson通过Gson gson=new
GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();方式创建的时候有效,也就是在通过Gson
gson=new Gson()方式创建的时候,@Expose注解是无效的。也就是有没有都一样,切记!
在Gson使用GsonBuilder创建下,Post请求中,id,code以及a字段会在序列化过程中过滤掉,也就是通过Retrofit向服务器提交Order对象的时候,服务器端只能接受到remark和list对应的数据
,除此之外的字段因为在序列化的过程中被忽略而没有提交给服务器。你可能注意到了list字段的@Expose注解
其deserialize=false, 这是因为我list字段在序列化的过程中是服务器需要的数据,但是在反序列化的过程中不希望他被赋值
所以在此进行了过滤。
也许有童鞋会问。还有其它方式没有,答案是有的,Gson 序列化/反序列化过程中过滤指定字段的方式大概有四种,此处只是说到了其中的一种而已 ,其它的三种:排除transient字段;排除Modifier为指定类型的字段;使用ExclusionStrategy定制字段排除策略;
排除transient字段:给字段添加transient字段 然后在 序列化/反序列化过程中该字段都会被过滤 不能单独对某一过程设置;
排除Modifier为指定类型的字段:通过Gson
gson =newGsonBuilder().excludeFieldsWithModifiers(Modifier.PROTECTED)
方式获取Gson并设置过滤域的修饰词 此处为过滤protected修饰的字段 也是同时作用于序列化/反序列化 不能单独对某一过程设置(待考证)
使用ExclusionStrategy定制字段排除策略:也是通过newGsonBuilder()来设置,自定义程度很高(等效于同时设置GsonBuilder的addSerializationExclusionStrategy和addDeserializationExclusionStrategy方法),详情百度即可,在此就不作详述了 参考技术A 在这上面问,你还不如看看gson的api呢。或者看看别人的博客。
以上是关于如何实现 Gson 序列化/反序列化过程中 过滤指定字段的主要内容,如果未能解决你的问题,请参考以下文章