我正在尝试json序列化一个MyRootClass类,其属性是第二个类MyClass的元素集合:
public class MyRootClass {
private List<MyInterface> list = new ArrayList<MyInterface>();
// getter / setter
}
public class MyClass implements MyInterface {
private String value = "test";
// getter / setter
}
Run Code Online (Sandbox Code Playgroud)
以下代码:
MyRootClass root = new MyRootClass();
root.getList().add(new MyClass());
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(System.out, root);
Run Code Online (Sandbox Code Playgroud)
生成此JSON输出:
{"list": [ {"value":"test"} ] }
Run Code Online (Sandbox Code Playgroud)
而不是我需要的,集合中的每个对象都用一个名称序列化:
{"list": [ {"myclass": {"value":"test"}} ] }
Run Code Online (Sandbox Code Playgroud)
有没有办法用Jackson实现它?我考虑过编写自定义序列化程序,但是我没有找到任何与对象集合相关的内容.
这取决于你想用名字实现什么; 但是,如果你想在这里包含'myclass'是类型信息(或者可以表现得好像它被使用;如果你不使用Jackson反序列化它并不重要),这可以做到.
如果是这样,您将注释MyInterface:
@JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT)
Run Code Online (Sandbox Code Playgroud)
和MyClass:
@JsonTypeName("myclass")
Run Code Online (Sandbox Code Playgroud)
(如果没有定义,默认名称将是该类的非限定名称)
@JsonTypeInfo 上面定义了要使用的类型名称(而不是Java类名称或自定义方法),并且使用包装器对象完成包含(替代方法是包装器数组和as-property)
那么你应该看到预期的输出.
| 归档时间: |
|
| 查看次数: |
14696 次 |
| 最近记录: |