【发布时间】:2017-04-29 23:41:39
【问题描述】:
我有以下对象结构,我无法对其进行任何修改(这是一个库,我没有源代码):
class Foo {
List bars; // with no generics (but this is a List<Bar>)
Baz baz;
}
class Bar {
Fiz fiz;
Buz buz;
}
class Baz {
int toto;
}
class Fiz {
String titi;
}
class Buz {
String tata;
}
还有下面的json:
{
"bars" : [
{
"fiz" : {
"titi" : "Hello"
},
"buz" : {
"tata" : "World"
}
},
{
"fiz" : {
"titi" : "Hola"
},
"buz" : {
"tata" : "El Mundo"
}
}
],
"baz" : {
"toto" : 42
}
}
我尝试使用以下代码反序列化 json:
ObjectMapper mapper = new ObjectMapper();
// ... use the visibilityChecker because objects are immutable (no setter)
mapper.readValue(json, Foo.class);
我检索的是 LinkedHashMap 列表而不是 Bar 列表。我已经在 stackoverflow 上查看了有关该主题的所有其他帖子,但每次列表都位于顶层,因此非常简单。我尝试使用 mixin 没有成功,我尝试使用 enableDefaultTyping 但出现错误...
我该怎么做?我再说一遍,我无法修改类文件、添加注释、添加中间对象……一切都在库中。
编辑 21/12/2016 : 我用 Mixin 试过了:
abstract class FooMixin {
@JsonProperty("bars")
@JsonDeserialize(contentAs = Bar.class)
List bars;
}
abstract class BarMixin {
@JsonProperty("fiz") Fiz fiz;
@JsonProperty("buz") Buz buz;
}
mapper.addMixin(Foo.class, FooMixin.class);
mapper.addMixin(Bar.class, BarMixin.class);
但是得到了相同的结果(LinkedHashMap)...
【问题讨论】:
-
在这里查看第 3 点:baeldung.com/jackson-collection-array
标签: java json collections jackson