Ejemplo n.º 1
0
        ForecastForCity IWeatherServiceResponseParser.Parse(String json)
        {
            //Anonymous object as template for deserialization
            var typeTemplate = new
            {
                City = new { Name = "", Country = "" },
                List = Enumerable.Empty <object>().Select(x => new
                {
                    Dt      = 1,
                    Speed   = 1.2M,
                    Deg     = 1,
                    Temp    = new { Day = 1.2M, Night = 1.2M },
                    Weather = Enumerable.Empty <object>().Select(y => new { Description = "" })
                })
            };

            var rawInfo = JsonConvert.DeserializeAnonymousType(json, typeTemplate);

            //Copy data to result
            ForecastForCity result = null;

            if (rawInfo.City != null)
            {
                result = new ForecastForCity();

                result.Location = new Location {
                    Country = rawInfo.City.Country, Name = rawInfo.City.Name
                };

                if (rawInfo.List != null)
                {
                    List <Forecast> forecasts = new List <Forecast>();
                    foreach (var item in rawInfo.List)
                    {
                        Forecast forecast = new Forecast();
                        forecast.Date = unixDefaultTime.AddSeconds(item.Dt).ToString("yyyy-MM-dd");
                        if (item.Weather != null && item.Weather.Count() > 0)
                        {
                            forecast.Summary = item.Weather.First().Description;
                        }

                        forecast.Temperature = new Temperature {
                            Day = item.Temp.Day, Night = item.Temp.Night
                        };

                        WindDirection wind = WindDirection.Create(item.Deg);

                        forecast.Wind = new Wind {
                            Speed = item.Speed, Direction = wind.Direction
                        };
                        forecasts.Add(forecast);
                    }
                    result.Forecast = forecasts;
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        internal static WindDirection Create(int directonInDegrees)
        {
            WindDirection result = null;

            if (directonInDegrees > 0 && directonInDegrees < 360)
            {
                double nameIndex = Math.Ceiling((directonInDegrees - offset) / directionSector);

                //Use first item.
                if (nameIndex > directionNames.Length - 1)
                {
                    nameIndex = 0;
                }

                String directionName = directionNames[(int)nameIndex];

                result = new WindDirection(directonInDegrees, directionName);
            }

            return(result);
        }