질문 2의 경우 : @Since는 주로 직렬화에 도움이됩니다. 버전 번호가 더 큰 필드는 무시되므로 최신 버전의 클래스에서 JSON을 작성합니다.
@Since는 탈 섬화에도 영향을 미치므로 내 의견에는 유용하지 않습니다. deserealization을 위해 @Since를 사용하면 JSON에있는 일부 필드가 무시되고 사용되는 버전 번호가 일부 필드보다 작 으면 클래스에도 표시됩니다. JSON을 새 클래스에서 읽는 것과 같은 새로운 클래스에서 JSON을 읽으므로 내 의견에는 유용하지 않습니다.
JSON 예 :
{
oldField: "value1",
newField: "value2"
}
자바 클래스 :
class MyClass {
@Since(0.0)
public String oldField;
@Since(1.0)
public String newField;
}
자바 테스트 : @since 경우 newField가 무시되었습니다 방법을 보여주는
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);
}
결과 작은 :
read as version 0.0
value1
null
read without version specified
value1
value2
Que 2의 경우. 값 데이터 유형이 변경되면 json 구문 분석과 다른 이유는 무엇입니까? 이에 대한 예가 여기에 나와 있습니다. http://bethecoder.com/applications/tutorials/json/google-gson/versioning.html – Sankalp