2012-11-30 2 views
2

GSON library에서 으로는 어떤 옵션이 있습니까?은 확장 클래스의 일부 레벨을 넘어 직렬화/비 직렬화됩니다. ThirdClassSecondClass을 - fromJsontoJson를 사용하는 경우 GSON은 확장 클래스를 직렬화/비 직렬화하지 않습니다.

예를 들어 나는 단지 계층 구조에서 처음 두 클래스를 직렬화/직렬화하고 싶은 다음 쓰임새 지금

class FirstClass { 
    int firstVariable; 
} 

class SecondClass extends FirstClass { 
    int secondVariable; 
} 

class ThirdClass extends SecondClass { 
    int thirdVariable; 
} 

과를 참조하십시오. 즉, level 3에 있기 때문에 전체 FirstClass (및 그 안에 firstVariable)을 무시한다는 의미입니다.

private static final Gson GSON = new GsonBuilder().addSerializationExclusionStrategy(new ExclusionStrategy() { 
    @Override 
    public boolean shouldSkipField(FieldAttributes f) { 
     return f.getDeclaringClass().equals(FirstClass.class); 
    } 

    @Override 
    public boolean shouldSkipClass(Class<?> clazz) { 
     return false; 
    } 
    }).create(); 

또한 역 직렬화에 ExclusionStrategy를 추가 할 수 있습니다

+0

왜 사용자 정의 유형 어댑터 작성에 문제가 있습니까? 대부분의 유지 관리 통증을 제거하는 유형 어댑터를 작성할 수 있습니다. –

답변

5

당신은 일반적으로 최상위 클래스를 제외 할 수 없습니다, 당신이 할 수있는 것은 ExclusionStrategy 사용합니다.

+0

변수에 의한 변수 이외의 다른 방법은 없습니까? – svenkapudija

+0

당신은 항상 자신의 사용자 정의 TypeAdapter 또는 Serializer/Deserializer를 작성할 수 있지만, Gson에게 계층 구조의 하위 클래스 필드 만 직렬화/직렬화 할 방법이 없습니다. –

+0

'FirstClass'의 모든 필드가 약간 수정되었습니다. 무시. 무시하고 싶은 수업을 알면 이것이 가장 쉬운 방법이라고 생각합니다. –

관련 문제