6
votes

Polymorphisme JSON

J'ai une liste d'objets JavaScript sur mon côté client, qui sont une liste des "événements" qu'un utilisateur a exécuté. Lorsque l'utilisateur est prêt, je souhaite envoyer ceci au serveur. L'ordre des événements est important, la préservation de la commande de liste est donc nécessaire.

Ce que je voudrais faire est d'avoir une bibliothèque JSON (ne vous dérange pas de savoir lequel) pour lier le JSON à certains objets d'événement dans mon code Java , où l'événement est une classe abstraite et j'ai 3 classes de béton que tous les événements étendent (permettent à EventA, eventb et eventc).

Scénario idéal serait quelque chose comme xxx < / pré>

qui peut contenir une liste d'éléments tels que xxx

est possible ou dois-je inspecter manuellement l'arborescence du JSON et désérialiser les éléments individuels de la matrice JSON?


0 commentaires

4 Réponses :


6
votes

Les objets JSON ne sont que des paires de clé / valeur et ne contiennent aucune information de type. Cela signifie que l'identification du type d'un objet JSON n'est pas automatiquement possible. Vous devez mettre en œuvre une logique sur le côté serveur pour déterminer le type d'événement avec lequel vous avez affaire.

Je suggérerais d'utiliser une méthode d'usine qui prend une chaîne JSON, analyse pour savoir quel type d'événement il est, crée un objet d'événement de la sous-classe correcte et le renvoie.


2 commentaires

C'était comme ça que j'allais. Espérait qu'il y avait une bibliothèque qui pourrait faire une petite réflexion pour déduire les informations de type, ou peut-être transmettre une liste de classes d'objet au désérialiseur, afin de choisir les classes à choisir parmi


Je vais aller avec votre méthode pour l'instant. Comme je n'ai qu'un nombre limité de cours, je peux désérialiser les classes de base avec une quantité limitée de traversée d'arbres.




1
votes

Pourquoi ne pas utiliser bibliothèque Jackson JSON ?

C'est un mappeur d'objet complet / JSON avec une fonctionnalité de liaison de données.

C'est rapide, petite empreinte, documentée, surutilisée et beaucoup d'autres choses que vous apprécierez!


0 commentaires

0
votes

J'ai commencé une bibliothèque qui implémente la fontionnalité souhaitée (pour JSON et XML) si le JSON est codé par la même bibliothèque:

https://github.com/giraudsa/serialisation p>

pour l'utiliser, MyObject MyObject = Nouveau SpécialiséObject (); Code> P>

String json = JsonMarshaller.ToJson(myObject);
MyObject myClonedObject = JsonUnMarshaller(json);


0 commentaires