public async Task <FourResponses <T, V, C, D> > MakeRequest <T, V, C, D>(CancellationToken?cancellationToken = null) where T : IFoursquareType where V : IFoursquareType where C : IFoursquareType where D : IFoursquareType { try { switch (Method) { case HttpMethod.GET: string resp = await MakeGetRequest(cancellationToken); var fourParsedResponse = JsonConvert.DeserializeObject <FourResponses <T, V, C, D> >(resp, new FoursquareFourResponseConverter <T, V, C, D>()); ProcessMultiNotifications(fourParsedResponse); return(fourParsedResponse); default: throw new Exception("Unsupported HttpMethod type"); } } catch (Exception e) { Debug.WriteLine("Network exception: " + e.Message); var response = new FourResponses <T, V, C, D> { Exception = e }; return(response); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { FourResponses <T, V, C, D> output = (FourResponses <T, V, C, D>)Activator.CreateInstance(objectType); JObject jObject = JObject.Load(reader); if (jObject["meta"] != null) { output.meta = jObject["meta"].ToObject <Meta>(); } if (jObject["notifications"] != null) { output.notifications = jObject["notifications"].ToObject <List <Notifications> >(); } JToken response = jObject["response"]; if (response?["responses"] != null) { var responses = response["responses"].Children().ToList(); if (responses.Count > 0) { output.SubResponse1 = ParseResponse <T>(responses.ElementAt(0)); } if (responses.Count > 1) { output.SubResponse2 = ParseResponse <V>(responses.ElementAt(1)); } if (responses.Count > 2) { output.SubResponse3 = ParseResponse <C>(responses.ElementAt(2)); } if (responses.Count > 3) { output.SubResponse4 = ParseResponse <D>(responses.ElementAt(3)); } } return(output); }