La mia struttura JSON:JsonSubTypes, elenco di oggetti polymorpic e Parcelable
{
...
"type":"post", // Type could vary
"items":[] // Array of items, each item is typeOf("type")
...
}
Come posso deserializzare integrante correttamente items
elenco all'interno della mia POJO:
public class ItemsEnvelope {
private String type;
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "type",
visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = A.class, name = "A"),
@JsonSubTypes.Type(value = B.class, name = "B"),
@JsonSubTypes.Type(value = C.class, name = "C")
})
private List<Item> items;
interface Item extends Parcelable {}
class A implements Item {
// Bunch of getters/setters and Parcelable methods/constructor
}
class B implements Item {
// Bunch of getters/setters and Parcelable methods/constructor
}
class C implements Item {
// Bunch of getters/setters and Parcelable methods/constructor
}
// Bunch of getters/setters and Parcelable methods/constructor
}
Per pacco elenco digitato un oggetto CREATOR
dovrebbe essere fornito, che un'interfaccia, ovviamente, non può avere. Dovrei usare una classe astratta invece di interfaccia?
Aggiunta la struttura JSON alla domanda. Quale metodo di inclusione dovrei usare nel mio caso? – localhost
Non c'è modo di indicare i tipi di tutti gli elementi di una matrice JSON; Jackson si aspetta informazioni sul tipo su ciascun elemento. Quindi, per supportare questo accordo, è necessario scrivere un deserializzatore personalizzato (e serializzatore se si desidera produrre tale JSON). – StaxMan