Gson序列化和反序列化时--如何排除及忽略字段呢?

戚薇 Java经验 发布时间:2023-04-21 22:22:05 阅读数:10745 1
下文笔者讲述Gson序列化和反序列化时--排除指定字段的方法分享

排除或忽略字段的实现思路

方式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();
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202304/16820869706291.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者