FasterXML / FasterXML/jackson-databind

Polymorphic serialization: use property name directly as type info, without wrapper

Offen
#2,005 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
polymorphic-handling
Vorherrschende Sprache
Java
Sterne
3.7k
Forks
1.5k
Ø Merge
3 T. 6 Std.
Gemergte PRs (30 T.)
28

Beschreibung

Given:

public class Zoo {
private Animal animal;
}
public abstract class Animal {
private String name = "Benji";
}
public class Dog extends Animal {
}
public class Cat extends Animal {
}

I want to be able to serialize an instance of `Zoo` so that it outputs either:

{
"dog": {
"name": "Benji"
}
}

or

{
"cat": {
"name": "Benji"
}
}

depending on the concrete type of `animal` in `Zoo`.

As far as I can tell, none of the options `@JsonTypeInfo` currently support this. The closest I can get is with the default `@JsonTypeInfo.As.WRAPPER_OBJECT`, but that results in:

{
"animal":
"cat": {
"name": "Benji"
}
}
}

I really don't want to have the wrapper object. The reason is that I want to remain backwards compatible with a previous incarnation of my object model where there were only `Dog`s, the `Animal` abstraction hadn't been created, and `Animal animal` in `Zoo` was `Dog dog`.

Is it possible to add a sub-type (de)serialization option that implements this?

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.