请考虑以下示例:
static class BaseBean { String baseField = "base"; }
static class ChildBean extends BaseBean { String childField = "child"; }
static class BaseBeanHolder {
List <? extends BaseBean> beans;
public BaseBeanHolder(List<? extends BaseBean> beans) { this.beans = beans; }
}
static class ChildBeanHolder {
List <ChildBean> beans;
public ChildBeanHolder(List<ChildBean> beans) { this.beans = beans; }
}
@Test
public void mcve() {
BaseBeanHolder baseHolder = new BaseBeanHolder(singletonList(new ChildBean()));
System.out.println(new Gson().toJson(baseHolder));
ChildBeanHolder childHolder = new ChildBeanHolder(singletonList(new ChildBean()));
System.out.println(new Gson().toJson(childHolder));
}
它打印:
{“beans”:[{“baseField”:“base”}]}
{“beans”:[{“childField”:“child”,“baseField”:“base”}]}
因此,尽管这两个列表都包含子对象,但只有第二个持有者会导致子字段序列化为 JSON。
我看到了其他问题,比如这里,但我想知道是否有合理的解决方法来实现我想要的。
换句话说:有没有办法让这样一个“holder”类接受BaseBeans或ChildBeans(这样做),并且在将Gson的实例序列化为JSON字符串时也为我提供了正确的结果?<? extends BaseBean>
(注意:我不能使用特定类型的适配器,因为我无法控制实际的Gson实例来自哪里以及如何在我们的环境中配置它)
慕斯王
慕码人2483693
杨魅力
相关分类