【问题标题】:jackson serializer: get serialized objectjackson 序列化器:获取序列化对象
【发布时间】:2012-05-30 14:42:13
【问题描述】:

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

我有一个这样的 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,但 Jackson 提供了很多我喜欢使用的功能;)

【问题讨论】:

    标签: java json jackson jsonserializer


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多