Java 为分层JSON映射中的特定属性编写自定义反序列化程序
JSON对象:Java 为分层JSON映射中的特定属性编写自定义反序列化程序,java,jackson,deserialization,Java,Jackson,Deserialization,JSON对象: ["emp" : { "departments": [ "modules": [ { "tasks": [ { "resources": 100, "notes": ""
["emp" : {
"departments": [
"modules": [
{
"tasks": [
{
"resources": 100,
"notes": ""
}
]
}
]
]
}]
我想把上面的JSON映射到一个列表
对象上。我的对象映射器看起来像:List emps=Arrays.asList(mapper.readValue(jsonString,Emp[].class))代码>
这个简单的对象映射器工作得很好。
我的问题是我必须以不同的方式将任务
对象从JSON反序列化到任务
对象
我知道我们可以使用jackson编写自定义反序列化程序,但这并不能解决我的问题。
我已经为任务
对象编写了一个CustomedSerializer
,但将其注册到对象映射器(如下所示)将尝试将整个JSON(列表
)序列化为任务对象。
SimpleModule mod = new SimpleModule("MyModule");
ObjectMapper mapper = new ObjectMapper();
mod.addDeserializer(Task.class,
new CustomDeserializer(Task.class));
mapper.registerModule(mod);
在解析过程中,是否有方法仅为特定属性指定自定义反序列化程序
?
还是有其他的选择
注意:我无法更改DTO来修复此问题。使用Jackson解析JSON有几种方法。您可以使用Jacksons树模型
解析或流式API
。两者都需要更多的代码,而不仅仅是mapper.readValue(jsonString,Emp[].class)
,但这比实现自己的JSON解析要好得多。您可以在Jackson文档中阅读到关于它们的内容使用Jackson解析JSON有几种方法。您可以使用Jacksons树模型
解析或流式API
。两者都需要更多的代码,而不仅仅是mapper.readValue(jsonString,Emp[].class)
,但这比实现自己的JSON解析要好得多。您可以在Jackson文档中阅读有关它们的信息