【发布时间】:2017-01-21 00:49:41
【问题描述】:
我们在GitHub Gist上的完整代码我只包括我认为需要显示问题的部分。
执行方法:
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 framework 3.5,我无法更改。随意添加您能想到的任何其他标签。
【问题讨论】:
-
我不会在生产中使用这样的代码...看起来真的很笨拙。
-
我认为您可以向
HttpRequestBase添加一个类型参数,例如HttpRequestBase<T>并使用JsonConvert.DeserializeObject<T>(responseString)并返回T类型 -
同意#2。反序列化仅提供该功能。也可以试试这个,以了解更多关于此事的信息:stackoverflow.com/questions/6626315/…
-
@JeremyHolovacs 我是界面新手,如果您有任何其他想法,很高兴学习