【问题标题】:Jackson JSON: Serialize certain properties under different view?Jackson JSON:在不同的视图下序列化某些属性?
【发布时间】:2013-07-27 02:29:02
【问题描述】:

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

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

有没有一种方法可以使用 JsonViews 或其他 Jackson 功能来完成此任务?谢谢

【问题讨论】:

  • 我刚才回答了一个关于这个的问题,可能有帮助吗? stackoverflow.com/questions/14774909/… - 您可以使用 JsonViews 进行子类化(实际上,重新阅读......因为它是递归引用,我不知道它会不会)

标签: java json jackson


【解决方案1】:

对于自定义序列化逻辑,您必须实现自己的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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多