我需要反序列化JSON,但能够控制对象实例化。由于我需要查看JSON对象内容才能构造该对象,因此我使用了JsonDeserializer
,ValueInstantiator
无法重置解析器或将其替换为{{1 }},所以剩下一个自定义的TreeNode
。
现在的问题是,当我想使用默认的序列化程序反序列化到我创建的对象时,我得到一个异常,说JsonDeserializer
无法反序列化到对象中。我正在反序列化具有getter和setter的接口/抽象类类型,例如
AbstractDeserializer
我不确定如何实现自己的需求。这是我使用的代码的草图
interface MyInterface {
String getName();
void setName(String name);
}
我要例外了
SimpleModule module = new SimpleModule();
objectMapper.registerModule(module);
module.setDeserializerModifier(new BeanDeserializerModifier() {
@Override
public JsonDeserializer<?> modifyDeserializer(Deserializationconfig config,BeanDescription beanDesc,JsonDeserializer<?> deserializer) {
if (special.contains(beanDesc.getBeanClass())) {
return new MyDeserializer(deserializer);
}
return deserializer;
}
});
public class MyDeserializer extends JsonDeserializer {
@Override
public Object deserialize(JsonParser jsonParser,DeserializationContext deserializationContext) throws IOException,JsonProcessingException {
ObjectCodec codec = jsonParser.getcodec();
JsonNode treeNode = codec.readTree(jsonParser);
JsonNode jsonNode = treeNode.get("someAttribute");
Object reference = //...
jsonParser = codec.treeAsTokens(treeNode);
jsonParser.nextToken();
return defaultDeserializer.deserialize(jsonParser,deserializationContext,reference);
}
}