我正在查看 Versioning Support section Gson 用户指南。
问题 1:它说您可以在类、字段和(在未来的版本中)方法上使用 @Since 注释。我理解对象字段的序列化,但是序列化一个类和一个方法是什么意思?
问题2:说的是在创建Gson对象的时候,可以指定一个版本,然后任何用@Since注解的字段,版本号大于那个的都会被忽略。这到底是什么意思?我知道,当 Json 包含反序列化到的 Java 类中不存在的额外字段时,这些字段将被忽略。那么,为什么您需要使用 @Since 注释?
最佳答案
对于问题 2: @Since 主要是帮助你序列化。版本号更大的字段将被忽略,因此您为当前较新类的先前版本编写 JSON。
@Since 对去序列化也有影响,在我看来不是很有用。如果使用的版本号小于那些字段,使用@Since 进行反序列化将忽略 JSON 中以及类中存在的一些字段。在我看来没那么有用,因为您在新类中读取新版本的 JSON 就像在新类中读取旧版本的 JSON。
JSON 示例:
{
oldField: "value1",
newField: "value2"
}
Java 类:
class MyClass {
@Since(0.0)
public String oldField;
@Since(1.0)
public String newField;
}
Java 测试:
public static void main(String[] args) {
Gson gson = new GsonBuilder().setVersion(0.0).create();
MyClass myClass = gson.fromJson("{oldField: \"value1\", newerField: \"value2\"}", MyClass.class);
System.out.println("read as version 0.0:");
System.out.println(myClass.oldField);
System.out.println(myClass.newField);
Gson gson2 = new GsonBuilder().create();
MyClass myClass2 = gson2.fromJson("{oldField: \"value1\", newField: \"value2\"}", MyClass.class);
System.out.println("read without version specified:");
System.out.println(myClass2.oldField);
System.out.println(myClass2.newField);
}
显示如果@Since 较小时如何忽略 newField 的结果:
read as version 0.0
value1
null
read without version specified
value1
value2
关于java - Gson - 关于版本控制的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13714676/