@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface Expose {
boolean serialize() default true;
boolean deserialize() default true;
}
Expose
注解是运行时注解,可以标注类属性。
可以传入两个boolean
类型的参数,都有默认值,默认值都为true
。
Expose
的中文是意思是暴露
, 所以,Expose
注解的意思就是在序列化或者反序列化的时候,是否要暴露该字段。
Expose
注解起作用的前提是,要有如下的配置:
GsonBuilder().excludeFieldsWithoutExposeAnnotation()
意思就是只有被Expose
注解的字段才可能
会进行序列化或者反序列化,没有被Expose
注解的字段会被排除掉, 他们一定不进行序列化或者反序列化。
1、创建一个实体类:
package com.fpliu.xx
import com.google.gson.annotations.Expose
data class Font(
@Expose
val id: Int,
@Expose
val name: String = "",
@Expose(deserialize = false)
val downloadURL: String = ""
)
2、使用:
val json = """{"id":10, "name":"阿里巴巴普惠体", "downloadUrl":"http://www.taobao.com"}"""
val gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
val font = gson.fromJson(json, Font::class.java)
上面font.downloadURL
变量的值是null
,这是因为@Expose(deserialize = false)
注解表明了downloadURL
不进行反序列化。