java jackson XML序列化:继承类的列表
我想序列化/反序列化这样的XML:
<Multi>
<child-001>
<name/>
<value/>
</child-001>
<child-002>
<name/>
<value/>
</child-002>
</Multi>
其中,child-001和child-002是从同一父级继承的类
public abstract class Parent {
private String name;
}
@JacksonXmlRootElement(localName = "child-001")
public class Child001 extends Parent {
private String value;
}
@JacksonXmlRootElement(localName = "child-002")
public class Child002 extends Parent {
private String value;
}
封装类如下所示:
class Multi {
@JacksonXmlElementWrapper(useWrapping = false)
private List<Parent> nodes = new ArrayList<>();
}
如果没有@JacksonXmlElementWrapper(useWrapping=false),我有:
<Multi>
<nodes>
<nodes>
<name>name001</name>
<value>value001</value>
</nodes>
<nodes>
<name>name002</name>
<value>value002</value>
</nodes>
</nodes>
</Multi>
根据我得到的注释:
<Multi>
<nodes>
<name>name001</name>
<value>value001</value>
</nodes>
<nodes>
<name>name002</name>
<value>value002</value>
</nodes>
</Multi>
这与我需要的非常接近,但仍然需要用“child-001”和“child-002”替换“nodes”
有人能告诉我哪里能找到解决办法吗?或者我应该使用JAXB而不是Jackson
谢谢
# 1 楼答案
通常,为了准确地表示示例XML文件,
Multi
类应该如下所示,这很好地工作:在代码中,您使用的是父类的
List
个对象,大概是因为您可能将任意数量的元素反序列化为Parent
的子类?这是多态反序列化的一种情况,需要定义类型信息,例如不幸的是,由于(jackson 2.9.2)尚未解决issue,jackson希望每个元素都有一个包装器,例如
<> P>直到解决这个问题,考虑第一个选项。如果有不希望序列化的字段,请将其保留为空