fastjson 请问如何反序列化为指定的子类

slwdgvem  于 2021-11-27  发布在  Java
关注(0)|答案(2)|浏览(756)

类定义

public class Item {
    private String name;

    public void setName(String name) {
      this.name =  name;
    }

    public String getName() {
      return this.name;
    }
  }

  public class SubItemOne extends Item {
    private int subItemOneId;

    public void setSubItemOneId(int subItemOneId) {
      this.subItemOneId = subItemOneId;
    }

    public int getSubItemOneId() {
      return this.subItemOneId;
    }
  }

  public class SubItemTwo extends Item {
    private int subItemTwoId;

    public void setSubItemTwoId(int subItemTwoId) {
      this.subItemTwoId = subItemTwoId;
    }

    public int getSubItemTwoId() {
      return this.subItemTwoId;
    }
  }

  public class SubItemOneList {
    private List<Item> itemList;

    public List<Item> getItemList() {
      return itemList;
    }

    public void setItemList(List<Item> itemList) {
      this.itemList = itemList;
    }
  }

  public class SubItemTwoList {
    private List<Item> itemList;

    public List<Item> getItemList() {
      return itemList;
    }

    public void setItemList(List<Item> itemList) {
      this.itemList = itemList;
    }
  }

json数据

[{"subItemOneId":"1", "name":"one1"}, {"subItemOneId":"2", "name":"one2"}]
[{"subItemTwoId":"1", "name":"Two1"}, {"subItemTwoId":"2", "name":"Two2"}]

请问我怎么可以让SubItemOneListSubItemTwoListList<Item>赋值为List<SubItemOne>List<SubItemTwo>

idv4meu8

idv4meu82#

我尝试了,但是不是我要的结果,下面是我的测试代码

@JSONType(seeAlso = {SubItemOne.class, SubItemTwo.class})
public class Item {
  private String name;

  public void setName(String name) {
    this.name =  name;
  }

  public String getName() {
    return this.name;
  }
}

@JSONType(typeName = "SubItemOne")
public class SubItemOne extends Item {
  private int subItemOneId;

  public void setSubItemOneId(int subItemOneId) {
    this.subItemOneId = subItemOneId;
  }

  public int getSubItemOneId() {
    return this.subItemOneId;
  }
}

@JSONType(typeName = "SubItemTwo")
public class SubItemTwo extends Item {
  private int subItemTwoId;

  public void setSubItemTwoId(int subItemTwoId) {
    this.subItemTwoId = subItemTwoId;
  }

  public int getSubItemTwoId() {
    return this.subItemTwoId;
  }
}

public class SubItemOneList {
  private List<Item> itemList;

  public List<Item> getItemList() {
    return itemList;
  }

  public void setItemList(List<Item> itemList) {
    this.itemList = itemList;
  }
}

public class SubItemTwoList {
  private List<Item> itemList;

  public List<Item> getItemList() {
    return itemList;
  }

  public void setItemList(List<Item> itemList) {
    this.itemList = itemList;
  }
}
String dataOne = "{itemList:[{\"subItemOneId\":\"1\", \"name\":\"one1\"}, {\"subItemOneId\":\"2\", \"name\":\"one2\"}]}";
    String dataTwo = "{itemList: [{\"subItemTwoId\":\"1\", \"name\":\"Two1\"}, {\"subItemTwoId\":\"2\", \"name\":\"Two2\"}]}";
    SubItemOneList subItemOneList = JSON.parseObject(dataOne, SubItemOneList.class);
    SubItemTwoList subItemTwoList = JSON.parseObject(dataTwo, SubItemTwoList.class);

可能是我前面表述不清楚,我是想SubItemOneList中的List<Item>赋值为List<SubItemOne>SubItemTwoList中的List<Item>赋值为List<SubItemOne>

下面是等价的实现

JSONObject jsonObject = JSON.parseObject(dataOne);
    SubItemOneList subItemOneList1 = new SubItemOneList();
    JSONArray jsonArray = jsonObject.getJSONArray("itemList");
    List<Item> itemList = new ArrayList<>();
    for (int i = 0; i < jsonArray.size(); i++) {
      JSONObject jsonObject1 = jsonArray.getJSONObject(i);
      SubItemOne subItemOne = new SubItemOne();
      subItemOne.setSubItemOneId(jsonObject1.getIntValue("subItemOneId"));
      subItemOne.setName(jsonObject1.getString("name"));
      itemList.add(subItemOne);
    }
    subItemOneList1.setItemList(itemList);

我不知道是不是我的用法有问题,如果是请指正

相关问题