【发布时间】:2015-06-13 15:37:09
【问题描述】:
我正在尝试通过以下方式使用 Jackson 将子类名称设置为序列化 XML 内容中的 XML 元素名称。
public interface Animal {
public String getName();
}
public class Dog implements Animal {
private String name;
public String getName(){
return name;
}
}
public class Cat implements Animal {
private String name;
public String getName(){
return name;
}
}
public class Zoo {
@JacksonXmlElementWrapper(useWrapping = false)
@JsonTypeInfo(include = As.WRAPPER_OBJECT, use = Id.NAME)
private List<Animal> animals;
// getters and setters
}
结果:
<Zoo>
<animals>
<Dog>
<name>xyz</name>
</Dog>
</animals>
<animals>
<Cat>
<name>abc</name>
</Cat>
</animals>
</Zoo>
通过添加@JsonTypeInfo(include = As.WRAPPER_OBJECT, use = Id.NAME),我可以将类名设置为包装对象。是否可以消除 <animal/> 包装器并生成以下格式的 XML:
<Zoo>
<Dog>
<name>xyz</name>
</Dog>
<Cat>
<name>abc</name>
</Cat>
</Zoo>
【问题讨论】:
-
这是列表的名称,所以你不能这样做。您正在尝试破坏序列化规则。
-
感谢您的回复...由于我们正在添加 WRAPPER_OBJECT,因此使用 @JsonTypeInfo,不需要列表包装器。这可以在 JAXB 中使用 @XmlElements({ @XmlElement() }) 注释来实现。想知道我们是否可以在 Jackson 中实现这一点(也许通过实现自定义序列化?)。请分享您的想法...
标签: java xml serialization jackson