2016-06-22 8 views
-2

戻り値の型を関数DoRequest()に渡すことができるようにするため、応答を非直列化する型を指定できますが、System.Typeの変数は渡せませんコンパイラが"responseType is a variable but is used like a type"というエラーを返すので、一般的な<>式に変換します。汎用メソッドにパラメータとしてSystem.Typeを渡す

これを行う方法はありますか?

static void Main(string[] args) 
    var requestObj = new MyRequestType(); 
    var responseObj = DoWebRequest(requestObj , typeof(MyResponseType)); 
} 

static object DoRequest(object reqObj, Type responseType){ 
    HttpClient client = new HttpClient(); 
    var response = client.PostAsJsonAsync("http://someuri.com", reqObj); 
    var stringResponse = response.Result.Content.ReadAsStringAsync().Result; 
    return JsonConvert.DeserializeObject<responseType>(respPostEpisode); 
    //Compile error: responseType is a variable but is used like a type 
} 
+1

あなたのメソッドは一般的ではありません、それは問題です –

+0

[一般的なメソッドを呼び出すためにリフレクションを使用するにはどうすればいいですか?](http://stackoverflow.com/questions/232535/how-do-i-use-リフレクションからコールへのジェネリックメソッド) – HimBromBeere

答えて

2

それをしないのはなぜ、あなたはDeserializeObjectの非ジェネリックオーバーロードが必要です。

return JsonConvert.DeserializeObject(respPostEpisode, responseType); 
0

あなたがすることはできませんか、あなたの方法は、一般的な作りにしたくない場合は、この方法

static void Main(string[] args) 
    var requestObj = new MyRequestType(); 
    var responseObj = DoWebRequest<MyResponseType>(requestObj)); 
} 

static object DoRequest<T>(object reqObj){ 
    HttpClient client = new HttpClient(); 
    var response = client.PostAsJsonAsync("http://someuri.com", reqObj); 
    var stringResponse = response.Result.Content.ReadAsStringAsync().Result; 
    return JsonConvert.DeserializeObject<T>(respPostEpisode); 
} 
関連する問題