GSON-反序列化嵌套的参数化对象

时间:2018-07-04 18:43:05

标签: java json gson

对于以下代码,我嵌套的参数化对象始终反序列化为LinkedTreeMap而不是原始类

我正在使用GSON进行JSON序列化和反序列化

以下是模型:

装有包装物品的购物车

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

项目包装器

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

汽车用品..

public class Car {
  private String model;
  private double price;

  public String getModel() {
    return model;
  }

  .....

  public void setPrice(double price) {
    this.price = price;
  }
}

图书项目..

public class Book {
  private String name;
  private String mediaType;

  public String getName() {
    return name;
  }

  .....

  public void setMediaType(String mediaType) {
    this.mediaType = mediaType;
  }
}

运行以下代码段

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

我得到了那个结果

model.Cart
com.google.gson.internal.LinkedTreeMap

代替

model.Cart
model.Book

任何想法如何解决此问题。

0 个答案:

没有答案