0

我的序列化程序有问题,这是我的问题:

我有一个这样的 bean 类:

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

当通过杰克逊进行序列化时,没有 @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 来做这件事,但杰克逊提供了很多我喜欢使用的功能;)

4

1 回答 1

0

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

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

于 2012-05-31T08:17:45.960 回答