通过委托给Joda Convert来一般序列化任何类型(例如Joda DateTime
)是微不足道的:
public class ToJodaConverter extends SerializerBase<Object> {
protected ToJodaConverter() {
super(Object.class);
}
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(StringConvert.INSTANCE.convertToString(value));
}
}
我想以同样的方式反序列化,如下所示:
public class FromJodaConverter extends StdDeserializer<Object> {
protected FromJodaConverter() {
super(Object.class);
}
@Override
public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
return StringConvert.INSTANCE.convertFromString(TYPE, jp.getText());
}
}
但是如何获得应转换为的TYPE?我一直在搜索JsonDeserializer
的其他子类,但无法找到如何执行此操作,或者如何使用type参数实现其他deserialize
方法。
答案 0 :(得分:3)
您需要指定要反序列化的类型:
public class FromJodaConverter<T> extends StdDeserializer<T> {
public FromJodaConverter(Class<T> clazz) {
super(clazz);
}
@Override
public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
return StringConvert.INSTANCE.convertFromString(handledType(), jp.getText());
}
}
因此,要创建一个反序列化Foo实例的FromJodaConverter,你可以使用
new FromJodaConverter(Foo.class);
要创建一个反序列化Baz实例的FromJodaConverter,你可以使用
new FromJodaConverter(Baz.class);