【发布时间】:2014-07-22 17:50:08
【问题描述】:
我有以下 JSON:
{
"item": [
{ "foo": 1 },
{ "foo": 2 }
]
}
这基本上是一个包含项目集合的对象。
所以我做了一个类来反序列化它:
public class ItemList {
@JsonProperty("item")
List<Item> items;
// Getters, setters & co.
// ...
}
到目前为止一切正常。
现在,为了让我在其他地方的生活更轻松,我决定能够迭代 ItemList 对象并让它实现 Collection 接口会很好。
所以基本上我的课变成了:
public class ItemList implements Collection<Item>, Iterable<Item> {
@JsonProperty("item")
List<Item> items;
// Getters, setters & co.
// Generated all method delegates to items. For instance:
public Item get(int position) {
return items.get(position);
}
}
实施工作正常且良好。但是,反序列化现在失败了。
看起来杰克逊很困惑:
com.fasterxml.jackson.databind.JsonMappingException: 不能 从 START_OBJECT 令牌中反序列化 com.example.ItemList 的实例
我尝试添加@JsonDeserialize(as=ItemList.class),但没有成功。
怎么走?
【问题讨论】:
-
我很确定stackoverflow.com/users/22656/jon-skeet 将能够回答这个问题。此外,您也许可以在stackoverflow.com/a/21279016/1382251 中找到一些有用的信息。
-
虽然这是一个很好的问题,但如果您只想迭代,为什么要让您的类成为集合而不是可迭代?
-
@chrylis: 这样我就可以
for (Item t : itemList) -
这不能回答我的问题。增强的 for 循环只需要
Iterable。 -
@chrylis: 是的,它是别的东西,一些代码正在使用 List.addAll (这需要 Collection)。虽然没有什么戏剧性的,但我想让它变得干净,以便可以将一个列表添加到另一个列表中。其他可能需要集合的 API 也是如此(例如我认为的 Comparator 或 sort & co。)。