2016-08-08 36 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作为通用参数来调用它。这可以称为现在只是在通用参数中传入,如T,例如:

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

你可以使用JsonConvert.PopulateObject直接填充实例:

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

return model;