2017-05-23 2 views
0

J'essaie de trouver un moyen de désérialiser sélectivement des champs spécifiques de flickr.Java Gson Désérialisation de champs sélectionnés à partir d'une liste à l'intérieur d'un objet

{"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":""},...]} 

Je reçois un objet qui contient deux listes (photos et photo) et je voudrais modèle en Java que l'id, url_s et le titre de la photo.

J'ai compris que je pouvais créer mon module java avec l'annotation @expose pour les champs qui m'intéressent et que j'utilise builder.excludeFieldsWithoutExposeAnnotation(); De cette façon, je contrôlerai les champs désérialisés de la photo (je ne suis toujours pas sûr que ce soit le cas), mais qu'en est-il des photos?

Mes questions sont les suivantes:

  1. Est-il possible d'ignorer cette liste? Dois-je modéliser une classe Java qui contient deux listes (avec leurs champs respectifs) juste pour saisir ce dont j'ai besoin de la deuxième liste?

  2. développerai la première question, si ma classe de module photo est:

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

    que je peux appeler gson uniquement sur la partie que j'ai besoin?

    Type galleryListType = new TypeToken<ArrayList<GalleryItems>>(){}.getType(); 
    
    List<GalleryItems> itemsList = gson.fromJson(jsonString, galleryListType); 
    
  3. puis-je utiliser une certaine façon setExclusionStrategies sauter la liste des photos?

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

Je l'ai déjà mis en œuvre une solution à l'aide JSONObject/JSONArray brut, mais je suis curieux en ce qui concerne l'utilisation GSON pour la tâche à accomplir.

Merci d'avance!

Répondre

0

Gson fournit la désérialisation sur les champs Java. Si vous marquez transient votre variable, Gson ne sera pas sérialisé en JSON. Gson fournit également un contrôle de désérialisation plus fine via annotations: @Expose(deserialize = false/true) La dernière option serait l'écriture de votre commande JsonDeserializer<T>

+0

je suis conscient que vous pouvez utiliser @Expose (comme je l'ai écrit ci-dessus) et passagères me aidera pas parce que je suis en train de désérialiser sélective et ne pas sérialiser tout sauf la variable transitoire –