序列化字段的属性而不是整个字段

时间:2012-10-04 14:29:12

标签: java json jackson

我在互联网上搜索过我的问题..但我没有找到一个好的解决方案。

我需要在最后显示json:

我有2个班级

class Order {
    Long id;

    Client client;
}

class Client {
    Long id;
}

当我序列化订单时,我得到:

[{"id":1,"client":{"id":1}]

但我想要获得:

[{"id":1,"client":1}]

我怎么能达到这个目标?

感谢您的任何解决方案! 马可

4 个答案:

答案 0 :(得分:1)

- 当一个类实现Serializable时,对象或其子类的对象将成为Serialized

- 现在是对象的Fields正在序列化的Object本身。

- 如果没有序列化失败,则序列化entire object graph 需要

- 因此Client成为Object Reference Variable类中的Order将获得序列化,其Field ID

- 无法序列化字段而非整个字段属性如果您希望阻止Field关键字序列化> transient

答案 1 :(得分:1)

使用@JsonValue注释:

class Client {
    @JsonValue Long id;
}

答案 2 :(得分:0)

您需要为此类编写自己的序列化方法。

例如,检查此主题:Implementing my own serialization in java

答案 3 :(得分:0)

您也可以尝试genson library http://code.google.com/p/genson/。 它拥有杰克逊的大部分功能以及杰克逊所不具备的其他一些优点。

要解决genson和少量代码的问题,你可以这样做:

public class Order {
    Long id;
    @JsonIgnore Client client;
    @JsonProperty("client") public Long getClientId() {
        return client.id;
    }
}

public static class Client {
    Long id;
}

System.out.println(new Genson().serialize(order));

如果您愿意,也可以使用genson编写自定义序列化程序,请参阅here。但在你的情况下,没有必要。