Jackson Polymorphism反序列化空JSON对象

时间:2013-04-22 04:02:01

标签: json jackson

我有一个杰克逊的多态问题。 我想将JSON数据反序列化为多态类型。阅读Jackson文档,我可以将JSON数据反序列化为多态类型。但是,我有一个特例。我有一个类结构如下:

class Supreme {
    private String type;
}
class Foo extends Supreme {
   public String label;
}
class Bar extends Supreme {
}

注意:Class Bar除了继承的“type”字段外没有任何其他成员变量。

我已将该结构转换为:

@JsonTypeInfo(use =     JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.PROPERTY,property ="type")
@JsonSubTypes({@Type(value = Foo.class, name = "Foo"),@Type(value = Bar.class, name = "Bar") })
class Supreme {
}
class Foo extends Supreme {
    public String label;
}
class Bar extends Supreme {
}

String data=
"[{
   "type": "Foo",
   "label": "abc"
},
{
   "type": "Bar"
}]"

如果我传入上面的json数据,如: new ObjectMapper().readValue(data, new TypeReference<List<Supreme>>());

我得到类似“无法从END_TOKEN反序列化类Bar”之类的内容。我相信这是因为JsonTypeInfo和JsonSubTypes注释已经解析了“type”属性,并且发现数组中的第二个实体应该映射到Bar类;但是它试图在该2实体中的type属性之后找到“something”。换句话说,杰克逊认为它是一个空的JSON对象。

(注意:上面没有数组中第二个条目的数据工作正常。换句话说,我们可以反序列化到包含Foo对象的列表,因为它至少具有“type”以外的属性)

知道怎么解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

错误的是,我使用的是Jackson 1.5 我碰到了杰克逊1.9,这个例外消失了。所以Jackson 1.5中有一个错误