C# C# Streams and Data Processing Serialization Deserializing with Json.NET

In the Program class, add a public static method named DeserializeWeather that returns a List<WeatherForecast> and takes

In the Program class, add a public static method named DeserializeWeather that returns a List<WeatherForecast> and takes a string fileName parameter. Create a new List<WeatherForecast> variable named weatherForecasts and return it.

Please help

Program.cs
using System;
using System.IO;
using System.Collections.Generic;

namespace Treehouse.CodeChallenges
{
    public class Program
    {
        public static void Main(string[] arg)
        {
        }

        public static string DeserializeWeather(string fileName)
        {
            var weatherForecasts = new List<WeatherForecast>();
            return weatherForecasts;
        }

        public static WeatherForecast ParseWeatherForecast(string[] values)
        {
            var weatherForecast = new WeatherForecast();
            weatherForecast.WeatherStationId = values[0];
            DateTime timeOfDay;
            if (DateTime.TryParse(values[1], out timeOfDay))
            {
                weatherForecast.TimeOfDay = timeOfDay;
            }
            Condition condition;
            if (Enum.TryParse(values[2], out condition))
            {
                weatherForecast.Condition = condition;
            }
            int temperature;
            if (int.TryParse(values[3], out temperature))
            {
                weatherForecast.Temperature = temperature;
            }
            double precipitation;
            if (double.TryParse(values[4], out precipitation))
            {
                weatherForecast.PrecipitationChance = precipitation;
            }
            if (double.TryParse(values[5], out precipitation))
            {
                weatherForecast.PrecipitationAmount = precipitation;
            }
            return weatherForecast;
        }
    }
}
WeatherForecast.cs
using System;

/* Sample JSON 

[
  {
    "weather_station_id": "HGKL8Q",
    "time_of_day": "06/11/2016 0:00",
    "condition": "Rain",
    "temperature": 53,
    "precipitation_chance": 0.3,
    "precipitation_amount": 0.03
  },
  {
    "weather_station_id": "HGKL8Q",
    "time_of_day": "06/11/2016 6:00",
    "condition": "Cloudy",
    "temperature": 56,
    "precipitation_chance": 0.08,
    "precipitation_amount": 0.01
  },
  {
    "weather_station_id": "HGKL8Q",
    "time_of_day": "06/11/2016 12:00",
    "condition": "PartlyCloudy",
    "temperature": 70,
    "precipitation_chance": 0,
    "precipitation_amount": 0
  },
  {
    "weather_station_id": "HGKL8Q",
    "time_of_day": "06/11/2016 18:00",
    "condition": "Sunny",
    "temperature": 76,
    "precipitation_chance": 0,
    "precipitation_amount": 0
  },
  {
    "weather_station_id": "HGKL8Q",
    "time_of_day": "06/11/2016 19:00",
    "condition": "Clear",
    "temperature": 74,
    "precipitation_chance": 0,
    "precipitation_amount": 0
  }
]
*/

namespace Treehouse.CodeChallenges
{
    public class WeatherForecast
    {
        public string WeatherStationId { get; set; }
        public DateTime TimeOfDay { get; set; }
        public Condition Condition { get; set; }
        public int Temperature { get; set; }
        public double PrecipitationChance { get; set; }
        public double PrecipitationAmount { get; set; }
    }

    public enum Condition
    {
        Rain,
        Cloudy,
        PartlyCloudy,
        PartlySunny,
        Sunny,
        Clear
    }
}

2 Answers

Steven Parker
Steven Parker
171,228 Points

The instructions say that the method *"returns a List<WeatherForecast>", which this code does inside the method body; but the declaration indicates the return value to be a string instead.

Just change the return type in the declaration and you'll pass task 1:

        public static List<WeatherForecast> DeserializeWeather(string fileName)
D Elis
D Elis
9,397 Points

Working code: using System; using System.IO; using System.Collections.Generic; using Newtonsoft.Json;

namespace Treehouse.CodeChallenges { public class Program { public static void Main(string[] arg) { }

    public static WeatherForecast ParseWeatherForecast(string[] values)
    {
        var weatherForecast = new WeatherForecast();
        weatherForecast.WeatherStationId = values[0];
        DateTime timeOfDay;
        if (DateTime.TryParse(values[1], out timeOfDay))
        {
            weatherForecast.TimeOfDay = timeOfDay;
        }
        Condition condition;
        if (Enum.TryParse(values[2], out condition))
        {
            weatherForecast.Condition = condition;
        }
        int temperature;
        if (int.TryParse(values[3], out temperature))
        {
            weatherForecast.Temperature = temperature;
        }
        double precipitation;
        if (double.TryParse(values[4], out precipitation))
        {
            weatherForecast.PrecipitationChance = precipitation;
        }
        if (double.TryParse(values[5], out precipitation))
        {
            weatherForecast.PrecipitationAmount = precipitation;
        }
        return weatherForecast;
    }
        public static List<WeatherForecast> DeserializeWeather(string fileName)
    {
        var weatherForecasts = new List<WeatherForecast>();

        using (var reader = new StreamReader(fileName))
        using (var jsonReader = new JsonTextReader(reader))
        {
            var serializer = new JsonSerializer();
            weatherForecasts = serializer.Deserialize<List<WeatherForecast>>(jsonReader);
        }

        return weatherForecasts;

    }
}

}