2010-07-20 1 views
2

Получения следующего исключения при десериализации объекта:не в состоянии десериализации объекта с со списком с помощью Gson апи

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] 

Вот класс, который я пытаюсь десериализация:

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; 
    } 
} 

Пожалуйста руководство.

+0

Вы нашли решение этой проблемы? – zohar

ответ

2

Если JSON является

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

тогда следующий пример использует Gson легко Deserialize/сериализации в/из одной и той же структуры данных Java в исходный вопрос.

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)); 
    } 

Если вместо этого JSON должен быть

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

то необходимо перевести название "com.gsicommerce.analytics.platform.model.webstore.AnalyticsProduct" JSON элемента к элементу Java items. Для этого Gson предоставляет несколько механизмов, самым простым из которых является просто комментировать атрибут items в TrusRegWishAddItemEvent следующим образом.

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

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

    ... 
} 

Но без этого @SerializedName аннотацию Gson не бросает исключение при попытке десериализации, вместо этого он просто создает экземпляр TrusRegWishAddItemEvent с items в качестве нулевой ссылки. Таким образом, неясно, что было сделано для генерации сообщения об ошибке в исходном вопросе.

Смежные вопросы