Gson序列化和反序列化时--如何排除及忽略字段呢?
下文笔者讲述Gson序列化和反序列化时--排除指定字段的方法分享
在ExclusionStrategy定义下方将排除所有带有@Hidden注解的字段。
排除或忽略字段的实现思路
方式1: 借助@Expose注解排除字段 方式2: 借助transient修饰符的方式排除字段 方式3: 借助excludeFieldsWithModifiers()方法 方式4: 指定排除策略例
Gson @Expose注解
@Expose注解 标记要排除的对象的某些字段 默认为标记为 以考虑将序列化和反序列化为JSON
@Expose示例
@Expose是可选的,并提供两个配置参数: serialize – 如果为真,则在序列化时会在 JSON 中写出带有此注解的字段。 deserialize – 如果为真,则从 JSON 反序列化带有此注解的字段。 @Expose(serialize = false) private String lastName; @Expose (serialize = false, deserialize = false) private String emailAddress; //创建 Gson 实例 //使用new Gson()创建 Gson //运行toJson()和fromJson()方法 //则@Expose将不会对序列化和反序列化产生任何影响 //使用此注解 //必须使用GsonBuilder类及其excludeFieldsWithoutExposeAnnotation()方法 //创建Gson实例 Gson gson = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() .create();
排除带有修饰符字段
transient 具有与@Expose (serialize = false, deserialize = false)相同的效果。 @Expose(serialize = false) private String lastName; private transient String emailAddress; //其他修饰符 //使用GsonBuilder的excludeFieldsWithModifiers()方法 //可排除具有某些公开修饰符的字段 例: 排除类中所有static成员 使用以下方式创建Gson对象 Gson gson = new GsonBuilder() .excludeFieldsWithModifiers(Modifier.STATIC) .create(); //“excludeFieldsWithModifiers”方法中 //使用任意数量的Modifier常量 //例 Gson gson = new GsonBuilder() .excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT, Modifier.VOLATILE) .create();
排除策略
序列化: 当shouldSkipClass(Class)或 shouldSkipField(fieldAttributes)方法返回true 则该类或字段类型将不属于JSON 反序列化: 当shouldSkipClass(Class)或 shouldSkipField(fieldAttributes)方法返回true 则不会将其设置为Java对象结构一部分例:
在ExclusionStrategy定义下方将排除所有带有@Hidden注解的字段。
//public @interface Hidden { // some implementation here //} // Excludes any field (or class) that is tagged with an "@Hidden" public class HiddenAnnotationExclusionStrategy implements ExclusionStrategy { public boolean shouldSkipClass(Class<?> clazz) { return clazz.getAnnotation(Hidden.class) != null; } public boolean shouldSkipField(FieldAttributes f) { return f.getAnnotation(Hidden.class) != null; } } //使用该排除策略 //需在GsonBuilder对象中进行设置 GsonBuilder builder = new GsonBuilder(); builder.setExclusionStrategies( new HiddenAnnotationExclusionStrategy() ); Gson gson = builder.create();
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。