0

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

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

有没有办法用 JsonViews 或其他杰克逊功能来完成这个?谢谢

4

1 回答 1

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();
    }
}
于 2013-07-26T18:11:28.303 回答