0

J'écris une application Sivlerlight Chat en utilisant Sockets et le DataContractSerializer.C# DatacontractSerializer over Sockets plusieurs éléments racine

J'ai une hiérarchie de classe d'objets sérialisables avec les définitions partagées entre le client Silverlight et le serveur C#. Quand un copain se connecte, il envoie un message au serveur et, s'il est vérifié, il reçoit un accusé de réception suivi de plusieurs messages lui indiquant qui d'autre est en ligne (ainsi que d'autres messages). Le client attend alors sur le socket et prépare les octets de celui-ci. Il va ensuite essayer de désérialiser les objets hors du flux d'octets résultant. Toutefois, étant donné que le serveur a envoyé plusieurs messages, le flux d'octets contiendra le fichier xml pour plus d'un élément et lorsqu'il est désérialisé, une exception racine multiple est levée.

Quelle est la solution standard pour désérialiser un flux d'objets à partir d'un socket à l'aide de DatacontractSerializer?

Merci

Répondre

0

J'ai trouvé une solution mais il semble un peu hacky. Étant donné que le sérialiseur de contrat de données produit XML, j'ai décidé d'écrire un octet '\ 0' supplémentaire dans le flux après chaque objet. Puis, à la fin, je prends juste (b => b! = 0) du flux d'octets pour trouver les objets. Cela fonctionne jusqu'à présent, mais il semble qu'il ya probablement un cas de bord je ne suis pas au courant.

...