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

Brittney Coble
Brittney Coble
12,642 Points

Inside the DeserializeWeather method, add a new StreamReader named reader and wrap it with a using statement. Use the fi

Challenge 2 of 4. I just have no idea and cannot get past it.

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 List<WeatherForecast> DeserializeWeather(string fileName)

        {
            DirectoryInfo directory = new DirectoryInfo(System.IO.Directory.GetCurrentDirectory());
            string fileName = Path.Combine(directory.FullName, "secretmessage.txt");


                using (var reader = new StreamReader(fileName))  
                Console.SetIn(reader);   
                {

                }
                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
    }
}

1 Answer

Steven Parker
Steven Parker
171,242 Points

Let's look at the task 2 instructions again: "Inside the DeserializeWeather method, add a new StreamReader named reader and wrap it with a using statement. Use the fileName argument as a parameter in the StreamReader constructor."

So this is asking you to add one line of code, and you do have it there, the line with "using" and "StreamReader". But you also have added a bunch of other stuff, including creating a "directory" variable, calling "SetIn", adding an empty code block, and initializing a variable "fileName" which conflicts with the parameter of the same name. None of this is mentioned in the instructions.

So you can remove all that, and then the last part of the instructions said "Be sure the put your code after the list instantiation and before you return the list." That means that the "using" line, while correct in itself, needs to be placed between the lines you added in task 1.

Tip: In general, you'll get best results from the challenges when you do only what the instructions ask for. Anything extra, even if it doesn't cause compiler errors, can still confuse the validation mechanism.