这个我们的完整代码GitHub Gist我只包括我认为需要显示的问题部分。返回通用对象类型
Execute方法:
public object Execute()
{
var request = createWebRequest();
request.Method = this.Method;
applyPostData(ref request);
request.ContentType = "application/json";
request.UserAgent = "generic-http-dotnet-client/3.5/v1 (gzip)";
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
try
{
return JsonConvert.DeserializeObject(responseString);
}
catch (Exception)
{
return new HttpResponse { message = responseString };
}
}
好这部作品的一种。然而,我希望能够做的是在该方法被称为适当的对象类型之后。
var response = (MetaDataResponse)request.Execute();
我知道应该有使用泛型我(野生猜测),以JSON DeserializeObject回应,并将它的一些方式可能?
我最终将执行方法的返回类型更改为一个字符串,并执行此操作。
public class MetaDataRequest : HttpRequestBase
{
public MetaDataResponse MetaDataItems { get; private set; }
public MetaDataRequest() : base(new Uri("https://www.googleapis.com/analytics/v3/metadata/ga/columns"), "GET")
{
this.addParameter("key", "xxxx");
var response = this.Execute();
try
{
MetaDataItems = JsonConvert.DeserializeObject<MetaDataResponse>(response);
}
catch (Exception)
{
var resultsx = new HttpResponse { message = response };
}
}
}
哪些工作,但接缝混乱给我。注意这个项目是.Net框架3.5,我不能改变这一点。随意添加任何你能想到的其他标签。
我不会在生产中使用类似的代码......看起来很笨拙的代码。 –
我认为你可以像'HttpRequestBase'一样向'HttpRequestBase'添加一个类型参数并使用'JsonConvert.DeserializeObject (responseString)'和返回类型'T' –
Nico
同意#2。反序列化只提供该功能。试试这个,以及关于此问题的更多阅读:http://stackoverflow.com/questions/6626315/in-c-can-you-cast-one-generic-type-to-another-whost-t-parameter -is-a-subclass –