public static CustomClasses.WebServiceResponse Execute(string url) { CustomClasses.WebServiceResponse retVal = new CustomClasses.WebServiceResponse(); retVal.Status = (int)StatusEnum.OK; string resStr = string.Empty; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); bool arrayStarted = false; try { List <CustomClasses.Hotel> hotels = null; int count = 0; HttpClient client = new HttpClient(); using (Stream stream = client.GetStreamAsync(url).Result) using (StreamReader sr = new StreamReader(stream)) using (JsonReader reader = new JsonTextReader(sr)) { CustomClasses.Hotel hotel = null; JsonSerializer serializer = new JsonSerializer { DateFormatString = "dd-MM-yyyy" }; while (reader.Read()) { if (arrayStarted && reader.TokenType == JsonToken.StartObject) { hotel = serializer.Deserialize <CustomClasses.Hotel>(reader); hotel.id = count; hotels.Add(hotel); DateIndexBuilder.AddIndex(hotel); } else if (reader.TokenType == JsonToken.StartArray) { arrayStarted = true; hotels = new List <CustomClasses.Hotel>(); } count++; } } retVal.Data = hotels; } catch (WebException ex) { retVal.Status = (int)StatusEnum.ERROR; retVal.ErrorMessage = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(); } return(retVal); }
public IEnumerable <CustomClasses.Hotel> GetHotels(string name = "", string dest = "", string priceRange = "", string dateRange = "") { IEnumerable <CustomClasses.Hotel> retVal = null; CustomClasses.WebServiceResponse response = APIHelper.Execute(Configurations.API_URL); if (response.Status == (int)StatusEnum.OK) { retVal = response.Data; if (!string.IsNullOrEmpty(name)) { retVal = retVal.Where(a => a.name.ToUpper() == name.ToUpper()); } if (!string.IsNullOrEmpty(dest)) { retVal = retVal.Where(a => a.city.ToUpper() == dest.ToUpper()); } if (!string.IsNullOrEmpty(priceRange)) { retVal = retVal.Where(a => a.price >= double.Parse(priceRange.Split(':')[0]) && a.price <= double.Parse(priceRange.Split(':')[1])); } if (!string.IsNullOrEmpty(dateRange)) { if (DateIndexBuilder.dateIndex != null && DateIndexBuilder.dateIndex.Count > 0) { List <int> hotelIds = DateIndexBuilder.dateIndex.Where(a => a.Key >= DateTime.ParseExact(dateRange.Split(':')[0], "dd-MM-yyyy", CultureInfo.InvariantCulture) && a.Key <= DateTime.ParseExact(dateRange.Split(':')[1], "dd-MM-yyyy", CultureInfo.InvariantCulture)).Select(a => a.Value).SelectMany(x => x).Distinct().ToList(); retVal = retVal.Where(a => hotelIds.Contains(a.id)); } } if (retVal.ToList().Count == 0) { throw new Exception("no records found"); } } return(retVal); }