gpt4 book ai didi

java - 简单的 JSON Jackson 多态反序列化

转载 作者:行者123 更新时间:2023-12-01 09:26:48 25 4
gpt4 key购买 nike

正在努力解决一些看起来微不足道但应该没有任何问题的事情。我有带有“@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;
}
}

抱歉,如果重复,但找​​不到完全相同的问题。大多数人都有更复杂的情况,其中有基类,也有注释等。这些情况实际上工作得很好。

我使用的是 Jackson 2.6.6

最佳答案

Jackson 将其转换为 LinkedhashMap,以便稍后我们可以使用其转换方法将给定的 LinkedhashMap 转换为自定义对象。所以这里你需要再添加一个步骤。

例如:

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new Sample("id"));
Object obj = mapper.readValue(json, Object.class);
Sample sample = mapper.convertValue(obj, Sample.class);

因此,您可以将这个 obj 保存在某处,并在方便时将其转换为 Sample 类。

关于java - 简单的 JSON Jackson 多态反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39768131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com