2016-08-08 4 views
0

Jsonレスポンスにバインドするモデルを受け入れるメソッドを作成しようとしていますが、クラスモデルのタイプをジェネリックに動的に挿入する方法はありませんパラメータ。ジェネリックパラメータで使用するクラスのタイプを取得

public static async Task<object> DoPost(string url, FormUrlEncodedContent formEnc, object model) 
    { 
     using (HttpClient client = new HttpClient()) 
     using (HttpResponseMessage response = await client.PostAsync(url, formEnc)) 
     using (HttpContent content = response.Content) 
     { 
      var result = await content.ReadAsStringAsync(); 
      var modelType = model.GetType(); 
      model = JsonConvert.DeserializeObject<modelType>(result); 

      return model; 
     } 
    } 

私はmodelTypeにタイプの適切な表現を取得するにはどうすればよい:

これは私がこれまで持っているものでしょうか?

答えて

0

これは単純に、以下のようにジェネリックに変更することができます。その後、Genericを簡単にデシリアライズすることができます。

public static async Task<T> DoPost<T>(string url, FormUrlEncodedContent formEnc) 
{ 
    using (HttpClient client = new HttpClient()) 
    using (HttpResponseMessage response = await client.PostAsync(url, formEnc)) 
    using (HttpContent content = response.Content) 
    { 
     var result = await content.ReadAsStringAsync(); 
     return JsonConvert.DeserializeObject<T>(result); 
    } 
} 

ここでは、任意のタイプのmodelを汎用パラメータとして呼び出すことができます。これは、汎用パラメータをとして次のように渡すだけで呼び出すことができます。

var user = DoPost<User>(url, formEnc); 
0

あなたは、直接インスタンスを移入するためにJsonConvert.PopulateObjectを使用することができます。

var result = await content.ReadAsStringAsync(); 
model = JsonConvert.PopulateObject(result, model); 

return model; 
関連する問題