Kotlin中Gson解析忽略特定字段问题解析(@Expose,@SerializedName)

引言:
在获取后台数据或者向后台提交请求体的时候,我们需要传递一个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属性.

你可能感兴趣的:(Kotlin)