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);
            }
        }
Esempio n. 2
0
        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);
        }