For the below code, my nested parameterized object is always deserialized as LinkedTreeMap instead of the original class
I am using GSON for json serializing & deserializing
Here are the models:
Cart containing wrapped items
public class Cart {
  private String id;
  private String owner;
  private List<ItemWrapper> relatedItems;
  .......
  public List<ItemWrapper> getRelatedItems() {
        return relatedItems;
  }
  public void setRelatedItems(List<ItemWrapper> relatedItems) {
    this.relatedItems = relatedItems;
  }
}
Item wrapper
public class ItemWrapper<T> {
  private String type;
  private String decription;
  private T item;
  public String getType() {
    return type;
  }
  public void setType(String type) {
    this.type = type;
  }
  ........
  public T getItem() {
    return item;
  }
  public void setItem(T item) {
    this.item = item;
  }
}
Car Item ..
public class Car {
  private String model;
  private double price;
  public String getModel() {
    return model;
  }
  .....
  public void setPrice(double price) {
    this.price = price;
  }
}
Book Item ..
public class Book {
  private String name;
  private String mediaType;
  public String getName() {
    return name;
  }
  .....
  public void setMediaType(String mediaType) {
    this.mediaType = mediaType;
  }
}
When I run the below snippet
Cart cart = gson.fromJson(
            "{\"id\":\"id123\",\"owner\":\"Usama\",\"relatedItems\":[{\"type\":\"Book\",\"decription\":\"book item\",\"item\":{\"name\":\"Love\",\"mediaType\":\"pdf\"}},{\"type\":\"Car\",\"decription\":\"car item\",\"item\":{\"model\":\"BMW\",\"price\":500000.0}}]}\n"
                    + "",
            Cart.class);
System.out.println(cart.getClass().getName());
System.out.println(cart.getRelatedItems().get(0).getItem().getClass().getName());
I got that result
model.Cart
com.google.gson.internal.LinkedTreeMap
instead of
model.Cart
model.Book
Any idea how to fix this.
 
    