J'essaie de JSON-Serialize une classe MyrootClass avec une propriété qui est une collection d'éléments d'une seconde classe myClass: Le code suivant: p> {"list": [ {"myclass": {"value":"test"}} ] }
3 Réponses :
Ce que vous voulez, c'est d'inclure le nom de la classe dans la sortie. Ce n'est pas la manière dont les sérialiszers JSON se comportent - ils n'incluent que des noms de champs.
Ce que vous pouvez faire est d'introduire une autre classe. P>
class MyClass implements MyInterface { private MyOtherClass myclass; } class MyOtherClass { private String value = "test"; }
Merci. C'est ce que j'essayais d'éviter, car j'utilise un modèle de classe hérité (je ne peux pas le modifier), mais je dois obtenir le format JSON (également une restriction imposée par un système tiers).
Vous pouvez envelopper le modèle de classe hérité à des fins de sérialisation.
Cela dépend de ce que vous voulez exactement réaliser avec le nom; Mais oui, cela peut être fait si vous voulez inclure «myClass 'ici est ici des informations de type (ou peut agir comme s'il était utilisé; si vous n'utilisez pas Jackson pour désherialiser, cela n'a pas d'importance).
Si oui, vous annoteriez myInterface: p> et myclass avec: p> (si vous ne définissez pas cela, nom par défaut serait un nom non qualifié de la classe) P> Vous devez donc voir la sortie attendue. p> p> @jsontypeinfo code> ci-dessus définit que le nom de type doit être utilisé (nom de classe Java ou méthode personnalisée), et l'inclusion est effectuée par Utilisation d'un objet wrapper (les alternatives sont une matrice d'emballage et de la propriété AS) p>
Vous pouvez utiliser un objet assistant comme celui-ci:
public static class MyObject { public int i; public MyObject(int i) { this.i = i; } public MyObject() {} } @JsonDeserialize(contentAs=MyObject.class) public static class MyHelperClass extends ArrayList<MyObject> { } @Test public void testCollection() throws JsonGenerationException, JsonMappingException, IOException { final Collection<MyObject> l = new ArrayList<MyObject>(); l.add(new MyObject(1)); l.add(new MyObject(2)); l.add(new MyObject(3)); final ObjectMapper mapper = new ObjectMapper(); final String s = mapper.writeValueAsString(l); final Collection<MyObject> back = mapper.readValue(s, MyHelperClass.class); }