通用方法无法将类型为“System.Object”的对象强制转换为类型X.

时间:2014-06-05 05:54:56

标签: c# asp.net-mvc generics

我是创建通用方法的新手,遇到了投射问题。

以下是用于与API通信的类库。我试图投射的对象生活在我的主应用程序中,这可能是问题,但我不知道。我可能做错了什么?

public T GetRequest<T>(Authentication auth, string api)
{
     var restClient = new RestClient(Constants.Api.Client);

     var restRequest = new RestRequest(api, Method.GET);
     SetParameters(restRequest, auth);

     var restResponse = restClient.Execute(restRequest);

     return JsonConvert.DeserializeAnonymousType<T>(restResponse.Content, (T)new object());
}

2 个答案:

答案 0 :(得分:2)

  

我试图投射的对象存在于我的主应用程序中

您的意思并不完全清楚,但您尝试投射的对象只是System.Object的一个实例:

(T)new object()

除非T本身为object,否则永远不会工作。

这里的问题似乎是你正在尝试使用一种专门用于处理匿名类型的方法(因此第二个参数作为“示例”出现以使类型推断起作用) - 但是使用的类型为不是匿名(T)。

我怀疑你只是想要:

return JsonConvert.DeserializeObject<T>(restResponse.Content);

答案 1 :(得分:0)

在您的方法中,最后一行(T)new object()是个问题。这毫无意义。您正在创建System.Object的新实例,并尝试将其投放到T,其中T可以是任何内容。只有在使用通用参数T作为System.Object调用时,您的方法才会成功。例如,GetRequest<object>(...)将通过,否则将失败。

我不确定你在这里要做什么。如果您能提供更多信息,那将很容易提供帮助。