Jackson EnumMap密钥序列化

人行

Jackson是否允许您自定义序列化EnumMap键的方式?例如,如果我有

public enum MyKey
{
    ABC, DEF, XYZ;

    public String getKey()
    {
        return "my-key-" + ordinal();
    }
}

还有一些

public class MyObject
{
    private final Map<MyKey,String> map = new EnumMap<>(MyKey.class);

    public MyObject()
    {
        map.put(MyKey.ABC, "foo");
        map.put(MyKey.DEF, "bar");
        map.put(MyKey.XYZ, "baz");
    }

    public Map<MyKey,String> getMap()
    {
        return map;
    }
}

然后杰克逊将序列MyObject化为

{"map":{"ABC":"foo","DEF":"bar","XYZ":"baz"}}

相反,我希望它像这样序列化

{"map":{"my-key-0":"foo","my-key-1":"bar","my-key-2":"baz"}}我不想覆盖任何toString()使其工作。在杰克逊,这一切可能吗?

我尝试这样做:

public class MyKeySerializer extends JsonSerializer<MyKey>
{
    @Override
    public void serialize(MyKey value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException
    {
        jgen.writeString(value.getKey());
    }
}

然后添加

public class MyObject
{
    ...

    @JsonSerialize(keyUsing = MyKeySerializer.class)
    public Map<MyKey,String> getMap()
    {
        return map;
    }

    ...
}

但这失败了org.codehaus.jackson.JsonGenerationException: Can not write text value, expecting field name

有任何想法吗???

杰克

使用jgen.writeFieldName(value.getKey());代替jgen.writeString(value.getKey());in MyKeySerializer如错误消息所示,Jackson希望您在序列化密钥时写一个字段名(而不是直接写文本)。

我尝试这样做,并且得到了预期的输出。希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过使用密钥作为值反序列化Jackson

来自分类Dev

接口的Jackson序列化

来自分类Dev

Jackson Json序列化

来自分类Dev

Jackson子类序列化

来自分类Dev

如何使用杰克逊(Jackson)和默认类型对一个EnumMap进行反序列化?

来自分类Dev

树结构的Jackson序列化/反序列化

来自分类Dev

使用Jackson ObjectMapper进行序列化

来自分类Dev

使用Jackson序列化UUID集

来自分类Dev

用Jackson序列化数组

来自分类Dev

Jackson序列化忽略时区

来自分类Dev

用于地图序列化的Jackson模块

来自分类Dev

用Jackson反序列化JSONP

来自分类Dev

处理Jackson亲子序列化

来自分类Dev

用Jackson反序列化枚举

来自分类Dev

Jackson-序列化日期对象

来自分类Dev

JAXB / Jackson XML通用序列化

来自分类Dev

序列化期间忽略Jackson JsonIdentityInfo

来自分类Dev

用Jackson进行反序列化

来自分类Dev

使用Jackson序列化vertx JsonObject

来自分类Dev

Hibernate和Jackson懒惰序列化

来自分类Dev

Scala Jackson反序列化

来自分类Dev

序列化期间忽略Jackson JsonIdentityInfo

来自分类Dev

Jackson - InvalidFormatException 反序列化 ENUM

来自分类Dev

MismatchedInputException - Jackson 反序列化

来自分类Dev

如何使用Jackson的objectMapper反序列化接口字段?

来自分类Dev

Spring MVC + Jackson:未序列化字段

来自分类Dev

使用Jackson反序列化包装列表

来自分类Dev

用Jackson进行JSON反序列化

来自分类Dev

Jackson:仅序列化给定类的给定实例变量