Полный код для этого нам на 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 };
}
}
Хорошо это работает вид. Однако то, что я хотел бы сделать, - это после того, как метод называется cast как соответствующий тип объекта.
var response = (MetaDataResponse)request.Execute();
Я знаю, что должен быть какой-то способ, возможно, с помощью дженериков (Wild угадывать) для меня 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', и использовать 'JsonConvert.DeserializeObject (responseString)' и возвращаемый тип 'T' –
Nico
Согласен с # 2. Deserialize предлагает именно эту функциональность. Попробуйте это, а также, чтобы больше узнать по этому вопросу: http://stackoverflow.com/questions/6626315/in-c-can-you-cast-one-generic-type-to-another-whos-t-parameter -is-a-subclass –