挣扎着看起来像平凡的东西,应该没有任何问题的工作。我有带“@class”属性的JSON,并且在调用时不知道它是类readValue()想将其反序列化到由“@class”引用的类的对象中。我取而代之的是“LinkedHashMap”。平凡的JSON杰克逊多态反序列化
@Test
public void toJsonAndBack() throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new Sample("id"));
assertTrue(json.contains("@class"));
Sample obj = (Sample)mapper.readValue(json, Object.class);
}
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
static class Sample {
private String id;
public Sample() {
}
public Sample(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
对不起,如果重复,但无法找到完全相同的问题。大多数人有更复杂的情况,其中有基类,这也是注释,等等。这些案件实际上工作正常。
我使用的是杰克逊2.6.6
不知道我理解你的问题,但反序列化的正确用法就是'Sample obj = mapper.readValue(json,Sample.class);',不投射。 – Mena
@Mena事实上,情况当然更复杂一些,这只是举例说明所需的行为。我不能使用类型信息。 – Stas