這個我們的完整代碼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 –