在自定义序列化程序中对枚举使用默认序列化

时间:2018-12-10 13:11:49

标签: json serialization jackson

我想使用Jackson 2.9.6用名为Foo的枚举值列表序列化类Bar

public class Foo {
    @JsonProperty("myBars")
    List<Bar> bars;
}

public enum Bar {
    @JsonProperty("Jane")
    JOHN,

    @JsonProperty("Roe")
    DOE
}

默认情况下,序列化输出

{
    "myBars": ["Jane", "Roe"]
}

但是,我希望序列化输出

{
    "myBars": "Jane;Roe"
}

因此,我为字段bars添加了一个自定义序列化程序,该序列化过程如下:

public void serialize(List<Object> list, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    gen.writeObject(StringUtils.join(list, ";")); // StringUtils from Apache Commons
}

不足为奇的是

{
    "myBars": "JOHN;DOE"
}

问题:如何在保留枚举值的默认序列化的同时使用自定义序列化器?

到目前为止,我的解决方案是迭代列表并使用单独的ObjectMapper来序列化单个枚举值。转义字符串仍然存在一些问题,但是至少这似乎可行。但是,我想知道是否也可以以一种简洁的方式来完成此操作。

0 个答案:

没有答案