Eine Liste mit polymorphen Elementen in Jackson kann nicht (de) serialisiert werden

Ich habe ein Problem bei der (De-) Serialisierung von JSON, das nicht von mir definiert wurde.

Hier ist ein Code und JSON, der das Problem erklärt:

Code:

public static class Base {
    public String klass = "base";
}

public static class SubBase extends Base {
}

public static class Sub1 extends SubBase {
    public Sub1() {
        klass = "Sub1";
    }
}

public static class Sub2 extends SubBase {
    public Sub2() {
        klass = "Sub2";
    }
}

public static class Holder {
    @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.WRAPPER_ARRAY, property="type")
    @JsonSubTypes({@JsonSubTypes.Type (name = "sub1", value = Sub1.class),@JsonSubTypes.Type(name = "sub2", value = Sub2.class)})
    public List<Base> items = new ArrayList<Base>();
}


Holder holder = new Holder();
holder.items.add(new Sub1());
holder.items.add(new Sub1());

mapper.writeValueAsString(holder);

produziert

{"items":[["sub1",{"klass":"Sub1"}],["sub1",{"klass":"Sub1"}]]}

Wenn ich die JsonTypeInfo-Anmerkung in ändere

    @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.WRAPPER_OBJECT, property="type")

produziert

{"items":[{"sub1":{"klass":"Sub1"}},{"sub1":{"klass":"Sub1"}}]}

Bisher ist alles gut :)

Der JSON-Code, den ich vom Server erhalte, hat jedoch eine etwas andere Struktur:

{"type":"sub1", "items":[{"klass":"Sub1"},{"klass":"Sub1"}]}

Wobei der Typ des Array "items" in der Eigenschaft "type" definiert ist (beachten Sie, dass alle Elemente im Array "items" derselben Klasse angehören).
Ich kann einfach nicht herausfinden, welche JsonTypeInfo-Kombination verwendet werden soll, um dies zu erreichen. Ich habe versucht, das Include auf ".EXTERNAL_PROPERTY" zu setzen, aber das funktioniert nicht.
Das Deserialisieren mit dieser Aufnahme gibt mir "Ausnahme im Thread "main" org.codehaus.jackson.JsonGenerationException: Es kann kein Feldname geschrieben werden, da ein Wert erwartet wird" Fehlermeldung.

Meine Frage ist: Welche Anmerkung muss ich verwenden, damit '{"type": "1", "items": [{"klass": "Sub1"}, {"klass": "Sub1"}]}'füllt das' items'-Array mit allen Sub1-Instanzen auf der Basis von "Art"Eigentum des Inhabers?
Wenn dies einfach nicht möglich ist, gibt es eine andere Möglichkeit, dies zu erreichen (ohne einen benutzerdefinierten Serialisierer für Holder; ein benutzerdefinierter Serialisierer nur für das Array 'items' wäre in Ordnung)?

Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage