2013-04-29 2 views
0

flexjson을 사용하면 모든 기본 변환기와 개체 팩토리를 사용하여 JSONSerializer(). deepSerialise (myObject) 및 JSONDeserializer(). deserialise (jsonString)를 사용하여 내 비즈니스 개체를 안드로이드 응용 프로그램의 파일로 serialize하는 것이 좋습니다.flexjson 및 버전 관리 : 변경 사항의 수용 방법은 flexjson입니까?

일단 응용 프로그램이 출시되면 이전 버전과의 호환성을 유지하기 위해 flexjsons 변환기 및 개체 팩토리를 새 릴리스에 작성하여 비즈니스 모델의 변경 사항을 수용해야합니다.

내가 잘 모르겠지만 기본 변압기와 개체 공장이 어떻게 대처할 수 있는지를 설명합니다. 즉, 필드를 클래스에 추가하고 필드가없는 이전 버전에서 새 클래스로 deserialise하면 실패하거나 새 필드가 null이거나 0 (숫자 인 경우)이됩니다. 내가 필드를 제거하면 같은 문제가 발생합니다. 거래는 명시 적으로 객체의 버전을 둘러싼 문제, 어떤이 있음을

이 모두 여기에 설명되어 표준 자바 직렬화에

.. http://docs.oracle.com/javase/7/docs/platform/serialization/spec/version.html

하지만 flexjson에 대한 해당 정보를 찾을 수 없습니다?

건배, Phil.

답변

0

Flexjson은 JSON을 먼저 살펴보고 포함 된 필드를 찾은 다음 비 직렬화하려는 객체의 필드를 찾습니다. 따라서 객체에 새 필드를 추가해도 직렬화 해제 프로세스가 실패하지는 않습니다. 새 필드는 JSON 객체에서 채워지지 않습니다. 즉, 생성자에서 설정된 값 또는 초기화 값을 유지합니다.

나중에 개체에서 필드를 제거하면 Flexjson은 해당 값을 설정자를 찾지 못하기 때문에 개체에 값을 deserialize하지 않습니다.

getter/setter 함수를 JSON에서 원하는 것으로 생각하면됩니다. JSON 객체의 모든 값을 serialize/deserialize 할 필요는 없습니다.

정말 까다로운 부분은 필드의 이름을 바꾸거나 필드의 유형을 변경하는 경우뿐입니다. 이름 바꾸기 필드는 오래된 세터를 유지하고 이전 세터에서 새 필드를 내부적으로 설정하여 처리 할 수 ​​있습니다. 비공개로 표시하거나 외부에서 숨기기 위해 보호 할 수 있으며 Flexjson은 계속 사용합니다. 유형을 변경하면 훨씬 더 까다 롭습니다. 한 가지 옵션은 이전 setter를 setFoo (String) 및 setFoo (List)와 같은 이전 유형으로 유지하고 새 유형에 적용하는 것입니다. 또 다른 옵션은 ObjectFactory를 작성하여 두 가지 유형으로 변환 할 수 있습니다. 물론 이것은 가장 힘든 일입니다. 마지막 옵션은 필드 이름을 변경하지 않고이 작업을 수행하지 않고 다른 방법 중 하나를 사용하여 변환하는 것입니다.

+0

개체에없는 json에 추가 필드가 추가되면 FlexJSON 역 직렬화가 실패합니까? –

+1

그냥 그 필드를 무시합니다. – chubbsondubs

+0

알려 주셔서 감사합니다. –