2017-05-23 15 views
0

flickr에서 특정 필드를 선택적으로 비 직렬화하는 방법을 찾으려고합니다.Java Gson 객체 내부 목록에서 선택된 필드의 직렬화 해제

{"photos":{"page":1,"pages":10,"perpage":100,"total":1000,"photo":[{"id":"","owner":"","secret":"","server":"","farm":,"title":"","ispublic":,"isfriend":,"isfamily":0,"url_s":"","height_s":"","width_s":""},...]} 

나는이 목록 (사진 및 사진)를 포함하는 객체를 받고 난 사진에서 자바만을 ID, url_s 및 제목을 모델링하고 싶습니다.

내가 관심이있는 필드에 @expose 주석을 사용하여 Java 모듈을 만들 수 있다는 것을 알아 냈습니다. builder.excludeFieldsWithoutExposeAnnotation(); 이렇게하면 어떤 필드가 사진에서 역 직렬화 될지 제어 할 수 있습니다 (그래도 여전히 그런 일이 확실하지 않습니다). 그러나 사진은 어떻게됩니까?

내 질문은 : 그 목록을 무시하는 방법이

  1. 있습니까? 두 번째 목록에서 필요한 항목을 가져 오는 두 개의 목록 (각 필드 포함)이 포함 된 Java 클래스를 모델링해야합니까?

    public class GalleryItem { 
    @Expose() 
    private String mCaption; 
    @Expose() 
    private String mId; 
    @Expose() 
    private String mUrl; 
    } 
    

    이 난 단지 내가 필요로하는 부분에 GSON를 호출 할 수 있습니다 : 사진에 대 한 내 모듈 클래스 인 경우

  2. , 이전의 질문에 확장?

    Type galleryListType = new TypeToken<ArrayList<GalleryItems>>(){}.getType(); 
    
    List<GalleryItems> itemsList = gson.fromJson(jsonString, galleryListType); 
    
  3. 나는 어떻게 든 사진 목록을 건너 setExclusionStrategies를 사용할 수 있습니까?

    gsonBuilder.setExclusionStrategies(new ExclusionStrategy() { 
    @Override 
    public boolean shouldSkipField(FieldAttributes f) { 
        **return f.getName().contains("photos")**; 
    } 
    
    @Override 
    public boolean shouldSkipClass(Class<?> incomingClass) { 
        return ; 
    } 
    }); 
    

은 이미 원시 된 JSONObject/JSONArray 사용하여 솔루션을 구현했습니다하지만 난 손에서 작업 GSON를 사용에 대한 궁금 하군요.

미리 감사드립니다.

답변

0

Gson은 Java 필드에서 비 직렬화를 제공합니다. 변수 transient으로 표시하면 Gson이 JSON에 직렬화되지 않습니다. GSON는 주석을 통해 미세한 deserialisation 제어 제공 : 마지막 옵션은 사용자 정의를 작성하는 것 @Expose(deserialize = false/true)JsonDeserializer<T>

+0

나는 선택적으로 역 직렬화려고하기 때문에 늘 @Expose (내가 위에 쓴) 과도를 사용하는 나에게 도움이 될 수 있습니다 알고 과도 변수를 제외한 모든 것을 직렬화하지 않는다. –