JAVA 序列化 Jackson_java-用于地图序列化的Jackson模块

我有一个包含地图(带有非字符串键)和一些其他字段的类.

public class MyClass() {

private Map map;

private String someField;

public MyClass(Map map, String someField) {

this.map = map;

this.someField = someField;

}

// Getters & Setters

}

我想使用Jackson来对该类进行序列化和反序列化.

我看到了另一种方式,决定尝试使用jackson modules.

我遵循了this post,并扩展了JsonDeserializer和JsonSerializer.问题在于这些类应该被键入,因此看起来应该像

public class keyDeserializer extends JsonDeserializer> {

...

}

KeySerializer也是如此.

然后添加到模块:

module.addSerializer(new keySerializer());

module.addDeserializer(Map.class, new keyDeserializer());

但这显然是错误的,因为我遇到了一个例外:

keySerializer does not define valid handledType() -- must either register with method that takes type argument or make serializer extend 'org.codehaus.jackson.map.ser.std.SerializerBase'

我可以将我的序列化器和反序列化器键入MyClass,但是随后我不得不手动解析所有这些,这是不合理的.

更新:

我设法通过使用注释绕过了代码中的模块创建

@JsonDeserialize(using = keyDeserializer.class)

@JsonSerialize(using = keySerializer.class)

private Map map;

但是然后我必须自己从toString()输出中对整个映射结构进行序列化/反序列化.因此尝试了不同的注释:

@JsonDeserialize(keyUsing = MyKeyDeserializer.class)

private Map map;

MyKeyDeserializer在哪里扩展org.codehaus.jackson.map.KeyDeserializer并覆盖该方法

public Object deserializeKey(String key, DeserializationContext ctxt) throws IOException, JsonProcessingException {...}

然后手动反序列化我的密钥,但再次从我的密钥类的toString()输出中反序列化.

这不是最佳方法(此方法依赖于toString()方法).有没有更好的办法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值