public async Task <FiveResponses <T, V, C, D, E> > MakeRequest <T, V, C, D, E>(CancellationToken?cancellationToken = null) where T : IFoursquareType where V : IFoursquareType where C : IFoursquareType where D : IFoursquareType where E : IFoursquareType { try { switch (Method) { case HttpMethod.GET: string resp = await MakeGetRequest(cancellationToken); var fiveParsedResponse = JsonConvert.DeserializeObject <FiveResponses <T, V, C, D, E> >(resp, new FoursquareFiveResponseConverter <T, V, C, D, E>()); ProcessMultiNotifications(fiveParsedResponse); return(fiveParsedResponse); default: throw new Exception("Unsupported HttpMethod type"); } } catch (Exception e) { Debug.WriteLine("Network exception: " + e.Message); var response = new FiveResponses <T, V, C, D, E> { Exception = e }; return(response); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { FiveResponses <T, V, C, D, E> output = (FiveResponses <T, V, C, D, E>)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)); } if (responses.Count > 4) { output.SubResponse5 = ParseResponse <E>(responses.ElementAt(4)); } } return(output); }