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);
            }
        }
Пример #2
0
        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);
        }