protected override object DeserializeCore(JObject json, Type objectType, ExploreVenuesLoadContext context)
            {
                try
                {
                    var nv = new ExploreVenues(context);

                    var keywords = json["keywords"];
                    var kwl      = new List <Keyword>();
                    if (keywords != null)
                    {
                        var items = keywords["items"];
                        if (items != null)
                        {
                            foreach (var item in items)
                            {
                                string displayName = Json.TryGetJsonProperty(item, "displayName");
                                string value       = Json.TryGetJsonProperty(item, "keyword");
                                var    keyword     = new Keyword(context.Section, displayName, value);

                                // special hard-coding for now
                                if (context.SectionDisplayName != null)
                                {
                                    keyword.SectionDisplayName = context.SectionDisplayName;
                                }

                                kwl.Add(keyword);
                            }
                        }
                    }
                    nv.RelatedKeywords = kwl;

                    var groups = json["groups"];
                    var grps   = new List <RecommendedCompactVenueList>();

                    bool isMemoryLimited = FourSquare.Instance.IsLowMemoryDevice;

                    if (groups != null)
                    {
                        foreach (var group in groups)
                        {
                            string groupType = Json.TryGetJsonProperty(group, "type");
                            string groupName = Json.TryGetJsonProperty(group, "name");

                            var thisGroup = new RecommendedCompactVenueList
                            {
                                Name = groupName,
                                Type = groupType,
                            };

                            var itms = group["items"];
                            if (itms != null)
                            {
                                int itemCount = 0;
                                foreach (var item in itms)
                                {
                                    // LIMITED MEMORY EXPERIENCE: ONLY 3 items.
                                    ++itemCount;
                                    if (isMemoryLimited && itemCount == 4)
                                    {
                                        break;
                                    }

                                    if (item != null)
                                    {
                                        var recommendation = RecommendedCompactVenue.ParseJson(item);
                                        if (recommendation != null)
                                        {
                                            thisGroup.Add(recommendation);
                                        }
                                    }
                                }
                            }

                            grps.Add(thisGroup);
                        }
                    }
                    nv.Groups = grps;

                    nv.IsLoadComplete = true;

                    return(nv);
                }
                catch (Exception e)
                {
                    throw new UserIntendedException(
                              "We couldn't explore right now, please try again later.", e);
                }
            }
示例#2
0
        public static RecommendedCompactVenue ParseJson(JToken jsonRecommendation)
        {
            var recommendation = new RecommendedCompactVenue();

            var reasons    = jsonRecommendation["reasons"];
            var reasonList = new List <RecommendationReason>();

            if (reasons != null)
            {
                var items = reasons["items"];
                if (items != null)
                {
                    foreach (var item in items)
                    {
                        string sType    = Json.TryGetJsonProperty(item, "type");
                        string sMessage = Json.TryGetJsonProperty(item, "message");
                        reasonList.Add(new RecommendationReason
                        {
                            Reason  = sType,
                            Message = sMessage,
                        });
                    }

                    if (reasonList.Count > 0)
                    {
                        recommendation.PrimaryReason = reasonList[0];

                        if (reasonList.Count > 1)
                        {
                            List <RecommendationReason> otherReasons = new List <RecommendationReason>();
                            for (int i = 1; i < reasonList.Count; i++)
                            {
                                otherReasons.Add(reasonList[i]);
                            }
                            recommendation.SecondaryReasons = otherReasons;
                        }
                    }
                }
            }
            recommendation.Reasons = reasonList;

            var venue = jsonRecommendation["venue"];

            if (venue != null)
            {
                recommendation.Venue = CompactVenue.ParseJson(venue);
            }

            var todos = jsonRecommendation["tips"];
            var tips  = new List <Tip>();

            if (todos != null)
            {
                foreach (var todo in todos)
                {
                    tips.Add(Tip.ParseJson(todo));
                }
                if (tips.Count > 0)
                {
                    recommendation.PrimaryTip = tips[0];
                }
            }
            recommendation.Tips = tips;

            return(recommendation);
        }
        public static RecommendedCompactVenue ParseJson(JToken jsonRecommendation)
        {
            var recommendation = new RecommendedCompactVenue();

            var reasons = jsonRecommendation["reasons"];
            var reasonList = new List<RecommendationReason>();
            if (reasons != null)
            {
                var items = reasons["items"];
                if (items != null)
                {
                    foreach (var item in items)
                    {
                        string sType = Json.TryGetJsonProperty(item, "type");
                        string sMessage = Json.TryGetJsonProperty(item, "message");
                        reasonList.Add(new RecommendationReason
                                           {
                                               Reason = sType,
                                               Message = sMessage,
                                           });
                    }

                    if (reasonList.Count > 0)
                    {
                        recommendation.PrimaryReason = reasonList[0];

                        if (reasonList.Count > 1)
                        {
                            List<RecommendationReason> otherReasons = new List<RecommendationReason>();
                            for (int i = 1; i < reasonList.Count; i++)
                            {
                                otherReasons.Add(reasonList[i]);
                            }
                            recommendation.SecondaryReasons = otherReasons;
                        }
                    }
                }
            }
            recommendation.Reasons = reasonList;

            var venue = jsonRecommendation["venue"];
            if (venue != null)
            {
                recommendation.Venue = CompactVenue.ParseJson(venue);
            }

            var todos = jsonRecommendation["tips"];
            var tips = new List<Tip>();
            if (todos != null)
            {
                foreach (var todo in todos)
                {
                    tips.Add(Tip.ParseJson(todo));
                }
                if (tips.Count > 0)
                {
                    recommendation.PrimaryTip = tips[0];
                }
            }
            recommendation.Tips = tips;

            return recommendation;
        }