adr*_*ano 13 java json jackson
我有一个类似于这个的类层次结构:
public static class BaseConfiguration {
}
public abstract class Base {
private BaseConfiguration configuration;
public String id;
public BaseConfiguration getConfiguration() { ... }
public void setConfiguration(BaseConfiguration configuration) { ... }
}
public class A extends Base {
public static class CustomConfigurationA extends BaseConfiguration {
String filename;
String encoding;
}
CustomConfigurationA getConfiguration() { ... }
}
class B extends Base {
public static class CustomConfigurationB extends BaseConfiguration {
/* ... */
}
CustomConfigurationB getConfiguration() { ... }
}
Run Code Online (Sandbox Code Playgroud)
和json这样输入(我不能改变自己)
{
"id":"File1",
"configuration":{
"filename":"...",
"encoding":"UTF-8"
}
}
Run Code Online (Sandbox Code Playgroud)
我正在用杰克逊解析Java中的JSON
ObjectMapper mapper = new ObjectMapper();
value = mapper.readValue(in, nodeType);
Run Code Online (Sandbox Code Playgroud)
我想使用JAVA/Jackson从JSON反序列化A,B和其他类.JSON中没有嵌入类型信息(也不可能).我不能在类上使用注释(我不拥有它们)和我(相信)我不能使用mixins,因为有可能任意数量的类,如A和B(并且mixin不是动态的).好的是反序列化代码知道哪个是用于反序列化的正确自定义类(基本上有从类到配置类的已知映射),但我不知道如何使杰克逊在反序列化JSON时识别这些信息.
简而言之:我希望能够通过设置ObjectMapper上的必要内容,根据周围的类类型解析配置对象的反序列化类型.怎么能实现这一目标?
显然答案是实现类似于http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html上发布的第六个解决方案,它使用唯一的JSON元素名称来识别目标要反序列化的类型.