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