2012-02-14 6 views
0

J'ai actuellement une application de socket que j'utilise pour envoyer une chaîne de va-et-vient d'un client à un serveur. J'ai récemment décidé qu'il serait plus logique d'envoyer des objets sérialisés à la place, mais j'ai rencontré un problème. J'ai converti le code pour utiliser le SoapFormatter qui m'a permis de sérialiser les objets en chaîne et envoyer la chaîne. J'ai rencontré un problème du côté client lorsque j'ai essayé de désérialiser des objets hérités. Il semble que le soapformatter ne supporte pas l'héritage. Le problème est survenu lors de la désérialisation, si j'ai essayé de désérialiser l'objet parent quand j'envoie l'objet enfant (je ne sais pas si c'est une terminologie correcte), il lancerait une exception de cast.Est-ce que .net BinaryFormatter prend en charge l'héritage?

Ma question est, est-ce que l'héritage de support de BinaryFormatter ??

+1

Code postal ... votre question n'a pas beaucoup de sens. –

+0

Bien sûr, cela fonctionne bien. – leppie

+1

Procédez-vous vous-même à la sérialisation /, ou fait-elle partie d'un appel de service en utilisant Remoting/web-services/WCF? Peut-être que le problème n'est pas avec votre sérialiseur, mais avec le contrat de service. –

Répondre

3

Les deux SoapFormatter et BinaryFormatter prennent en charge la sérialisation des objets de types qui héritent d'autres types. En d'autres termes, les deux supportent l'héritage.

Vous devriez probablement poser une autre question à propos de votre problème spécifique avec SoapFormatter. De plus, le simple fait d'utiliser un formateur différent ne résoudra probablement pas votre problème (mais vous pouvez l'essayer avant de le demander ici).

+0

Oui, il semble qu'ils supportent l'héritage. J'ai lu quelque part ailleurs que ce n'était pas le cas. J'ai découvert que mon problème était que lorsque chaque classe est sérialisée, elle est marquée avec une signature "ExampleMessage version = 1.0.0.0 project = server" ou quelque chose comme ça. J'utilise un fichier lié appelé ExampleMessage.cs qui est le même pour le serveur et le client mais le sérialiseur le traite comme une classe différente car il est construit par différents projets. Par conséquent, il jette une exception de cast lors de la désérialisation. – german129

+0

Oui, le type doit provenir du même assemblage lors de la sérialisation que lors de la désérialisation, dans des circonstances normales. – svick

Questions connexes