我有一个具有共同基类的对象列表。我希望序列化(和反序列化)此列表,以便每个列表元素都以其根元素与类型名称相同的方式序列化,并且在该元素周围没有包装对象。
我尝试将JsonTypeInfo与Id.Name和As.WRAPPER_OBJECT一起使用,这会生成具有正确元素名称的XML,但(显然)会生成另一层XML元素(来自列表本身)。
package zm.study.xmlserialize.jackson;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class JacksonListTest4 {
public static class L {
public List<A> as = new ArrayList<>();
}
@JsonTypeInfo(use = Id.NAME, include=As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value=B.class, name="b"),
@JsonSubTypes.Type(value=C.class, name="c"),
})
public static abstract class A {
}
public static class B extends A {
}
public static class C extends A {
}
@Test
public void test() throws Exception
{
L l = new L();
l.as.add(new B());
l.as.add(new C());
new XmlMapper().enable(SerializationFeature.INDENT_OUTPUT)
.writeValue(System.out, l);
}
}
我想得到:
<L>
<as>
<b/>
<c/>
</as>
</L>
相反,我得到了:
<L>
<as>
<as>
<b/>
</as>
<as>
<c/>
</as>
</as>
</L>