Ich habe folgende JSON:Deserialisieren nicht für eine Klasse Umsetzung Kollektion mit Jackson
{
"item": [
{ "foo": 1 },
{ "foo": 2 }
]
}
Dies ist im Grunde ein Objekt, das eine Auflistung von Elementen enthält.
Also machte ich eine Klasse deserialisieren, dass:
public class ItemList {
@JsonProperty("item")
List<Item> items;
// Getters, setters & co.
// ...
}
Alles schön bis zu diesem Punkt arbeitet.
Nun, um mein Leben woanders einfacher zu machen, entschied ich, dass es schön wäre, auf dem ItemList-Objekt zu iterieren und es die Collection-Schnittstelle zu implementieren.
Also im Grunde wurde meine Klasse:
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);
}
}
Die Umsetzung funktioniert und schön. Die Deserialisierung schlägt jedoch fehl.
Sieht aus wie Jackson ist verwirrt:
com.fasterxml.jackson.databind.JsonMappingException: Kann nicht Instanz com.example.ItemList aus START_OBJECT deserialisieren Token
Ich habe versucht, @JsonDeserialize(as=ItemList.class)
hinzuzufügen, aber es hat nicht den Trick gemacht.
Was ist der Weg zu gehen?
Ich bin ziemlich sicher, dass http://stackoverflow.com/users/22656/jon-skeet Lage sein wird, diese zu beantworten. Darüber hinaus können Sie unter http://stackoverflow.com/a/21279016/1382251 nützliche Informationen finden. –
Während dies eine gute Frage ist, wie es ist, wenn alles, was Sie wollen, iterieren, warum machen Sie Ihre Klasse eine Sammlung statt nur iterierbar? – chrylis
@chrylis: so dass ich 'für (Artikel t: itemList)' –