0

ソケットと DataContractSerializer を使用して Sivlerlight チャット アプリケーションを作成しています。

Silverlight クライアントと C# サーバーの間で共有される定義を持つシリアル化可能なオブジェクトのクラス階層があります。

バディがログオンすると、メッセージがサーバーに送信され、確認された場合は、承認が送信され、その後に他に誰がオンラインであるかを示すいくつかのメッセージが送信されます (および他のメッセージも)。次に、クライアントはソケットで待機し、ソケットからバイトを準備します。次に、結果のバイト ストリームからオブジェクトを逆シリアル化しようとします。ただし、サーバーが複数のメッセージを送信したため、バイト ストリームには複数の要素の xml が含まれ、デシリアライズされると複数ルート例外がスローされます。

DatacontractSerializer を使用してソケットからオブジェクトのストリームを逆シリアル化するための標準的なソリューションは何ですか?

ありがとう

4

1 に答える 1

0

少しハッキーなようですが、解決策を見つけました。

データ コントラクト シリアライザーは XML を生成するため、各オブジェクトの後に追加の '\0' バイトをストリームに書き込むことにしました。最後に、オブジェクトを見つけるためにバイトストリームから while(b => b != 0) を取得します。これはこれまでのところ機能していますが、おそらく私が気付いていないエッジケースがあるようです。

...

于 2009-12-07T05:16:19.343 に答える