jackson序列化器:获取序列化对象

时间:2012-05-30 14:42:14

标签: java json jackson jsonserializer

我遇到了Serializer的问题,这是我的问题:

我有一个像这样的bean类:

@JsonSerialize(using = MyObjectSerializer.class)
public class MyObject {
    public int a;
    public boolean b;
}

当通过Jackson序列化时,没有@JsonSerialize注释,我显然得到:

{ "a": 42, "b": true}

但我需要添加一个属性,因此它给出了:

{ "a": 42, "b": true, "version": "0.1-beta" }

(这是一个例子,在现实世界中,我添加的属性取决于对象的几个属性)

所以我需要编写一个自定义序列化程序。 但是,在我的实际代码中,该类包含的内容远远多于2,因此我不想手动为json对象创建这些属性...

如果我使用它:

public static class MyObjectSerializer extends JsonSerializer<MyObject> {
    @Override public void serialize(MyObject obj, JsonGenerator json, SerializerProvider provider) throws IOException, JsonProcessingException {
        json.writeObject(obj);
    }
}

我显然得到了StackOverflowError。

所以问题可能是:

  • 如何从JsonSerializer内部序列化对象而无需重新调用序列化程序本身?

  • 如何向序列化的对象动态添加属性。

我曾经一直用GSon这样做,但杰克逊提供了我喜欢使用的大量功能;)

1 个答案:

答案 0 :(得分:0)

我非常确定在您的示例getVersion()中,没有支持属性的getter就足够了,您可以在其中生成0.1-beta。 (或根据您描述的几个属性的值生成值)。

因此,不需要为此目的使用自定义序列化程序