获取要在泛型参数中使用的类的类型

时间:2016-08-08 02:15:15

标签: c# .net generics

我正在尝试创建一个接受任何模型绑定到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中正确表示类型?

2 个答案:

答案 0 :(得分:0)

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

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

return model;

答案 1 :(得分:0)

这可以简单地改为Generic,如下所示。然后你的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传递给Generic参数,例如:

即可调用此方法
 var user = DoPost<User>(url, formEnc);