我想用Jackson(jackson-dataformat-xml
)对给定的XML文件进行反序列化。有两种方法。第一种是在类上带有一些注释,第二种是使用反序列化器。由于xml文件是深层嵌套的,例如
<a>
<b>
<c>
<d>
<e>...</e>
<e>...</e>
</d>
</c>
</b>
</a>
我不想为每个级别创建类并使用反序列化器。当前看起来像这样:
public class ObjDeserializer extends StdDeserializer<Obj> {
public MetadataDeserializer() {
this(null);
}
public MetadataDeserializer(Class<?> vc) {
super(vc);
}
@Override
public Obj deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
final JsonNode objNode = jp.getCodec().readTree(jp);
return new Obj(objNode.get("a").get("b").get("c").get("d").findValueAsText("e"));
}
}
这里的问题是,仅找到第一个e
。我需要e
的所有值。如何使用反序列化器实现这一目标?我尝试了第一种注释方法,即
@JacksonXmlProperty(localName = "e")
@JacksonXmlElementWrapper(useWrapping = false)
private void unpackEProperties(final JsonNode e) {
...
}
,并且每个e
都会多次调用该方法,但是由于DOM的深度,因此无法选择此方法。