【发布时间】:2016-09-29 10:43:38
【问题描述】:
在一些看起来微不足道的事情上挣扎,应该可以毫无问题地工作。我有带有“@class”属性的 JSON,并且在调用时不知道它的类 readValue() 想要将其反序列化为“@class”引用的类的对象。我得到的是“LinkedHashMap”。
@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 实际上,当然,案例要复杂一些,这只是说明所需行为的示例。我不能使用类型信息。
标签: java json serialization jackson deserialization