2010-07-20 4 views
2

Obtenir l'exception suivante lors de la désérialisation d'un objet:Pas en mesure de désérialiser un objet avec la liste à l'aide Gson api

com.google.gson.JsonParseException: 
    The JsonDeserializer [email protected]a 
    failed to deserialized json object 
     {"com.gsicommerce.analytics.platform.model.webstore.AnalyticsProduct": 
      [ 
       {"id":"3680231","longTitle":"Graco SnugRide Infant Car Seat - Pippin","available":"true"} 
      ] 
     } 
    given the type [email protected] 

Voici la classe que je suis en train de désérialiser:

public class TrusRegWishAddItemEvent implements Serializable { 
    static final long serialVersionUID = 1L; 
    private final List<AnalyticsProduct> items; 

    private TrusRegWishAddItemEvent() { 
     items = null; 
    } 

    public TrusRegWishAddItemEvent(List<AnalyticsProduct> items) { 
     this.items = items; 
    } 

    public List<AnalyticsProduct> getItems() { 
     return items; 
    }  
} 

public class AnalyticsProduct implements Serializable { 
    static final long serialVersionUID = 1L; 
    private final long id; 
    private final String longTitle; 
    private final boolean available; 

    public AnalyticsProduct() { 
     id = 0; 
     longTitle = null; 
     available = false; 
    } 

    public AnalyticsProduct(long id, String longTitle, boolean available) { 
     this.id = id; 
     this.longTitle = longTitle; 
     this.available = available; 
    } 

    public long getId() { 
     return id; 
    } 

    public String getLongTitle() { 
     return longTitle; 
    } 

    public boolean isAvailable() { 
     return available; 
    } 
} 

S'il vous plaît guider.

+0

Avez-vous trouvé une solution à ce problème? – zohar

Répondre

2

Si le JSON est

{ 
    "items": 
    [ 
    { 
     "id":"3680231", 
     "longTitle":"Graco SnugRide Infant Car Seat - Pippin", 
     "available":"true" 
    } 
    ] 
} 

alors l'exemple suivant utilise Gson facilement désérialisation/sérialisation à/de la même structure de données Java dans la question initiale.

public static void main(String[] args) throws Exception 
    { 
    Gson gson = new Gson(); 
    TrusRegWishAddItemEvent thing = gson.fromJson(new FileReader("input.json"), TrusRegWishAddItemEvent.class); 
    System.out.println(gson.toJson(thing)); 
    } 

Si au lieu JSON doit être

{"com.gsicommerce.analytics.platform.model.webstore.AnalyticsProduct": 
     [ 
      {"id":"3680231","longTitle":"Graco SnugRide Infant Car Seat - Pippin","available":"true"} 
     ] 
    } 

alors il est nécessaire de traduire le nom de l'élément JSON "com.gsicommerce.analytics.platform.model.webstore.AnalyticsProduct" au membre Java items. Pour ce faire, Gson fournit un couple de mécanismes, le plus simple étant d'annoter l'attribut items dans TrusRegWishAddItemEvent comme suit.

class TrusRegWishAddItemEvent implements Serializable 
{ 
    static final long serialVersionUID = 1L; 

    @SerializedName("com.gsicommerce.analytics.platform.model.webstore.AnalyticsProduct") 
    private final List<AnalyticsProduct> items; 

    ... 
} 

Mais sans cette annotation @SerializedName Gson ne jette pas une exception lors d'une tentative de désérialiser, au lieu qu'il construit juste une instance TrusRegWishAddItemEvent avec items comme une référence null. Donc, ce qui a été fait pour générer le message d'erreur dans la question initiale n'est pas clair.

Questions connexes