@Expose
1.1、Expose注解的定义
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface Expose {
    boolean serialize() default true;

    boolean deserialize() default true;
}

Expose注解是运行时注解,可以标注类属性。

可以传入两个boolean类型的参数,都有默认值,默认值都为true

1.2、Expose注解的作用

Expose的中文是意思是暴露, 所以,Expose注解的意思就是在序列化或者反序列化的时候,是否要暴露该字段。

Expose注解起作用的前提是,要有如下的配置:

GsonBuilder().excludeFieldsWithoutExposeAnnotation()

意思就是只有被Expose注解的字段才可能会进行序列化或者反序列化,没有被Expose注解的字段会被排除掉, 他们一定不进行序列化或者反序列化。

1.3、示例

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不进行反序列化。