引言:
在获取后台数据或者向后台提交请求体的时候,我们需要传递一个bean实体,但这个bean中有我们定义的不想被序列化的字段,怎样把这些特殊字段标记为不序列化的字段呢.从我个人而言,一般常用的三种形式如下.
@Expose字段
Expose有两个属性,serialize和deserialize,顾名思义是序列化和反序列化,如果在Gson解析时不指定,默认都为true.
data class User(@Expose var name: String,
var age: Int,
@Expose var sex: String)
val str = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(User("张三", 18, "男"))
println(str)
上述代码序列化出来之后是{“name” : “张三”, “sex” : “男”},没有age属性.相似类推.
自定义解析策略
data class User(var name: String,
var age: Int,
var sex: String)
val str = GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getName().equls("age", ignore = true)
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
//过滤掉 类名包含 Bean的类
return clazz.getName().contains("Bean");
}
}).create().toJson(User("张三", 18, "男"))
println(str)
序列化出来之后是{“name” : “张三”, “sex” : “男”},也没有age属性.
声明权限过滤 Modifier
data class User(var name: String,
protected var age: Int,
var sex: String)
val str = GsonBuilder().excludeFieldsWithModifiers(Modifier.PROTECTED).create().toJson(User("张三", 18, "男"))
println(str)
同样的,序列化出来之后是{“name” : “张三”, “sex” : “男”},也没有age属性.