Jackson JSON:在不同视图下序列化某些属性?

时间:2013-07-26 18:05:31

标签: java json jackson

如果我有一个名为“TreeNode”的类,其中包含一个名为“children”的实例变量(以及其他),这是一个其他TreeNodes的数组,有没有一种方法可以在一个JsonView下序列化TreeNode实例,但是序列化我的“children”数组中所有TreeNodes在不同的JsonView下?

我想要完成的是:当我序列化单个TreeNode时,我希望序列化该TreeNode中的所有属性,包括其子节点的列表,但我不希望子节点的所有属性被序列化(例如孩子的“孩子”数组)。基本上,如果我序列化一个TreeNode,我只想看到TreeNode和孩子们一个级别。孩子们还有其他一些我想隐藏的属性,只有当它们被序列化为“子”阵列的一部分时才会被隐藏。

有没有办法可以通过JsonViews或其他杰克逊功能实现这一目标?感谢

1 个答案:

答案 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();
    }
}