我正在将 Jackson 从 1.9.4 升级到 2.2.0。过渡一直很顺利,除了我似乎无法为对象工作的数组解析。在 1.9.4 中,我可以这样做:
private List<Subjects> mSubjects;
mSubjects = objectMapper.readValue(subjectsJsonArrayNode, new TypeReference<List<Subjects>>() {});
使用 Jackson 2.2.0,我收到“无法解析方法”编译时错误。Jackson 的 1.9.4 的 ObjectMapper 头文件包含这些 JsonNodes 的 readValue 方法:
public <T> T readValue(JsonNode root, java.lang.Class<T> valueType)
public <T> T readValue(JsonNode root, org.codehaus.jackson.type.TypeReference valueTypeRef)
public <T> T readValue(JsonNode root, org.codehaus.jackson.type.JavaType valueType)
和 Jackson 2.2.0 的头文件:
public <T> T readValue(JsonParser jsonParser, java.lang.Class<T> tClass)
public <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.core.type.TypeReference<?> typeReference)
public final <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.core.type.ResolvedType resolvedType)
public <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.databind.JavaType javaType)
所以我需要从传递 JsonNode 切换到 JsonParser,但我不太确定如何进行转换。也就是说,我不确定我是否走在正确的道路上,因为 JsonParser 被定义为一个抽象类,所以我什至无法轻松地初始化一个实例来使用它。
对于那些没有答案的人,这里有一个临时解决方案,我可以在其中迭代并手动解析每个对象:
private List<Subjects> mSubjects = new ArrayList<Subjects>();
for(JsonNode subjectJsonNode : subjectsJsonArrayNode) {
mSubjects.add(objectMapper.treeToValue(subjectJsonNode, Subject.class));
}