2012-01-23 5 views
2

私はSpring.Restフレームワークを使用しています。バイトとして受信されたプロトを逆シリアル化する方法[]

私たちが402を受け取った場合、本体にはさまざまなエラー情報が含まれるプロトが含まれます。

402で発生したExceptionは、Spring.Rest.Client.HttpClientErrorExceptionのインスタンスです。 例外内の応答は、Spring.HttpResponseMessageのインスタンスです。 応答内のボディの型はbyte []です。 これは、Deserialiserがストリームを期待している間に私はバイト[]を持っていることを意味します。私は次のことを行っている体に含まれるプロトをdeserialiseするために

MemoryStream mStream = new MemoryStream(); 
mStream.Write(exception.Response.Body,0,exception.Response.Body.Length); 
var proto = Serializer.Deserialize<XXXRestProtoException>(mStream); 

私はプロトが戻っ検査時に、そのプロパティはすべてnullです。 私のアプローチは正しいのですか、それともDeserializeメソッドにストリームを提示する前にもっとや​​る必要がありますか?

クライアントとサーバーで使用されるプロト定義が同期しており、本体がサーバー上に正しく構成されていることが確認されました。

このコードによって生成されるストリームは、指定されたbyte []と同じ長さと内容を持ち、コンテンツ長のヘッダーと一致します。

答えて

0

ストリームにWriteがある場合、Positionは、ストリームのエンドに残ります。 2つの簡単なオプション:

  1. ストリームを巻き戻します。 WriteDeserialize間、置く:

    ms.Position = 0; 
    
  2. ブロブからのストリームを初期化します。私は通常、後者を使用したい

    MemoryStream mStream = new MemoryStream(exception.Response.Body); 
    

を。

+0

ありがとうMarc、それは私の問題でした。 – Aidan

+0

正確には、新しいMemoryStream(exception.Response.Body)を使用する必要がありました。 位置のリセットが機能しませんでした。 – Aidan

+0

@Aidan odd - それは持っているはずです –

関連する問題