@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface Until {
double value();
}
Until
注解是运行时注解,可以标注类属性和类。必须传入一个double
类型的值。
Until
的中文是意思是直到
, 结合Until
的定义,我们可以看出来:Until
注解的意思就是直到指定的版本
。
Until
的数学表达就是(-∞, value]
当前版本号
处于此区间内,被标注的字段或者是类才能被序列化或反序列化,否则,就不会进行序列化或反序列化。
当前版本号
必须通过如下方法进行设置:
GsonBuilder.setVersion(doubleValue)
1、创建一个实体类:
package com.fpliu.xx
import com.google.gson.annotations.Until
@Until(6.0)
data class Province(
var id: Int,
var name: String = "",
var cities: List = listOf()
)
该实体类被Until
注解,我们传入的参数是6.0
,这表示, 直到6.0
版本,该类一直都可以被序列化或者被反序列化,如果超过了6.0
版本, 那么就不能被序列化或者被反序列化。
2、使用:
val json = """{"id":10, "name":"内蒙古", cities:["呼和浩特", "鄂尔多斯", "包头"]}"""
val gson = GsonBuilder().setVersion(7.0).create()
val province = gson.fromJson(json, Province::class.java)
上面province
变量的值是null
,这是因为当前版本是7.0
, 而实体类的Until
注解表明从6.0
版本之后,该类不可以被序列化或者被反序列化。
1、创建一个实体类:
package com.fpliu.xx
import com.google.gson.annotations.Until
data class Province(
var id: Int,
@Until(6.0)
var name: String = "",
var cities: List = listOf()
)
该实体类中的name
字段被Until
注解,我们传入的参数是6.0
,这表示, 从6.0
版本之后,该类不可以被序列化或者被反序列化。
2、使用:
val json = """{"id":10, "name":"内蒙古", cities:["呼和浩特", "鄂尔多斯", "包头"]}"""
val gson = GsonBuilder().setVersion(7.0).create()
val province = gson.fromJson(json, Province::class.java)
上面province.name
变量的值是null
,这是因为当前版本是7.0
, 而name
字段的Until
注解表明从6.0
版本之后,该字段不可以被序列化或者被反序列化。