2012-05-02 6 views
0

HTTPのWebリクエストから受け取ったストリームのボディをレスポンスとして逆シリアル化したい。問題は、特定の型としてデシリアライズを行う必要がある場合です。私は複数のGetを持っていて、彼らは異なった応答を持っています(1つは戻り値の型p、他の戻り値はq)。私は任意の型を逆シリアル化し、型カストが私に必要な値を返すときに一般化された何かを返す一般化されたメソッドを持っていたい。HTTPレスポンスの戻り値の型特定の型への逆シリアル化

+0

私はブロックをキャッチして、それをデシリアライズしようとすることができますが、それは悪いプログラミングpractice.what他のオプションがありますか? – Rain

答えて

0

マジックソースは、どのタイプを入力するかを知っています。これを済ませたら、一般的なデシリアライザを作成するのはかなり簡単です:

public object Deserialize(string serialized, Type T) { 
    if (string.IsNullOrEmpty(serialized)) { 
     return null; 
    } 
    XmlSerializer xs = new XmlSerializer(T); 
    MemoryStream ms = new MemoryStream(StringToBytes(s) ?? new byte[0]); 
    XmlTextWriter tw = new XmlTextWriter(ms, Encoding.UTF8); 
    return xs.Deserialize(ms); 
} 

これは一般的な方法に変換するのも簡単です。

+0

返される型を見つけるための他の選択肢はありませんでした。だから、私は、HTTPヘッダ( 'ResponseType')を追加してサービス側の応答に返されるオブジェクトの型を追加しました。クライアント側では、私はちょうどレスポンスヘッダをチェックしてそれに応じてデシリアライズしました。 – Rain