2017-05-23 19 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":""},...]} 

は、私は2つのリスト(写真や写真)を含むオブジェクトを受け取り、私は写真からJavaで唯一のID、url_sとタイトルをモデル化したいと思います。

私は興味のあるフィールドの@exposeアノテーションを使用してJavaモジュールを作成できることを理解しました。 builder.excludeFieldsWithoutExposeAnnotation(); このようにして、どのフィールドが写真から逆シリアル化されるかを制御します(それでもgonneの仕事はそのようにはわかりませんが)。

私の質問は以下のとおりです。

  1. はそのリストを無視する方法はありますか? 2番目のリストから必要なものを取得するために2つのリスト(それぞれのフィールドを含む)を含むJavaクラスをモデル化する必要がありますか?

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

    iはiのみが必要部分に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はまた、アノテーションによって細かいデシリアライゼーションコントロールを提供します。@Expose(deserialize = false/true) 最後のオプションは、カスタムJsonDeserializer<T>

+0

を書くことになり、私が選択的にデシリアライズしようとしているので、私は(私は上記の書いたように)あなたが@Exposeを使用することができ、過渡文句を言わないが、私を助けて承知しています一時変数以外のすべてを直列化しません –

関連する問題