如果我有一个名为“TreeNode”的类,其中包含一个名为“children”的实例变量(以及其他),这是一个其他TreeNodes的数组,有没有一种方法可以在一个JsonView下序列化TreeNode实例,但是序列化我的“children”数组中所有TreeNodes在不同的JsonView下?
我想要完成的是:当我序列化单个TreeNode时,我希望序列化该TreeNode中的所有属性,包括其子节点的列表,但我不希望子节点的所有属性被序列化(例如孩子的“孩子”数组)。基本上,如果我序列化一个TreeNode,我只想看到TreeNode和孩子们一个级别。孩子们还有其他一些我想隐藏的属性,只有当它们被序列化为“子”阵列的一部分时才会被隐藏。
有没有办法可以通过JsonViews或其他杰克逊功能实现这一目标?感谢
答案 0 :(得分:3)
对于自定义序列化逻辑,您必须实现自己的JsonSerializer
。
例如:
public class TreeNodeSerializer extends JsonSerializer<TreeNode> {
@Override
public void serialize(TreeNode value, JsonGenerator generator,
SerializerProvider provider) throws IOException, JsonProcessingException {
generator.writeStartObject();
generator.writeStringField("value", value.getValue());
generator.writeNumberField("numValue", value.getNumValue());
generator.writeArrayFieldStart("children");
for(TreeNode child : value.getChildren()) {
generator.writeStringField("value", child.getValue());
generator.writeNumberField("numValue", child.getNumValue());
}
generator.writeEndArray();
generator.writeEndObject();
}
}