Ploue Posté(e) 19 février 2011 Share Posté(e) 19 février 2011 Bonsoir ! Je souhaite échanger des informations entre un client et un serveur. J'ai réussi à envoyer des objets sérializés à l'aide de la librairie Gson de google, et avec des sockets UDP. Mon problème est que les objets envoyés par le client peuvent être de plusieurs types suivants les cas (classe A, classe B, ...). Et je ne sais pas comment le serveur peut différencier cela à la réception, puisqu'on doit spécifier la classe lors de la deserialization. J'ai donc essayé de mettre une classe abstraite au dessus de mes objets, et de déserializer en spécifiant cette classe, mais cela ne fonctionne pas. J'ai essayé avec une autre lib (jackson), mais j'ai pas réussi non plus ... Avez-vous une idée ? Coté client : A objectA = new A("test"); String json = gson.toJson(objectA); // écriture sur socket [...] B objectB = new B("test2"); String json = gson.toJson(objectB); // écriture sur socket Coté serveur : String json = // lecture sur socket // Comment savoir si l'objet sérializé est de type A ou de type B ? A object = gson.fromJson(json, A.class); // on ne peut lire qu'un A Abstract abstractObject = gson.fromJson(json, Abstract.class); // erreur car gson ne peut pas instancier une classe abstraite Merci d'avance :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 20 février 2011 Share Posté(e) 20 février 2011 Tu peux donner le nom de ta classe (canonical name) séparément du "contenu" de l'objet. Et coté serveur, tu peux obtenir l'objet "Class" en faisant un Class.forName() Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ploue Posté(e) 20 février 2011 Auteur Share Posté(e) 20 février 2011 Ouai c'est l'idée que j'ai eu aussi, effectivement ça marche bien :) Et j'ai finalement utilisé jackson qui a l'air plus performant. Merci :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.