gpt4 book ai didi

java - jackson : custom collection serialization to JSON

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:00 27 4
gpt4 key购买 nike

我正在尝试使用一个属性对类 MyRootClass 进行 json 序列化,该属性是第二个类 MyClass 的元素集合:

public class MyRootClass {
private List<MyInterface> list = new ArrayList<MyInterface>();
// getter / setter
}

public class MyClass implements MyInterface {
private String value = "test";
// getter / setter
}

以下代码:

MyRootClass root = new MyRootClass();
root.getList().add(new MyClass());
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(System.out, root);

生成此 JSON 输出:

{"list": [ {"value":"test"} ] }

不是我需要的,集合中的每个对象都用一个名称序列化:

{"list": [ {"myclass": {"value":"test"}} ] }

有什么方法可以使用 Jackson 实现吗?我考虑过编写一个自定义序列化程序,但我没有找到任何与对象集合相关的内容。

最佳答案

这取决于你想用 name 实现什么;但是,是的,如果您想在此处包含“myclass”是类型信息(或者可以像使用它一样;如果您不使用 Jackson 反序列化它并不重要),则可以这样做。

如果是这样,您将注释 MyInterface:

@JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT)

和 MyClass 有:

@JsonTypeName("myclass")

(如果你不定义它,默认名称将是类的非限定名称)

上面的

@JsonTypeInfo 定义了要使用的类型名称(而不是 Java 类名称或自定义方法),并且包含是通过使用包装对象完成的(备选方案是包装数组和 as-属性)

因此您应该会看到预期的输出。

关于java - jackson : custom collection serialization to JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3954265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com