Search code examples
c#asp.netjsonjson-deserialization

Struggling to convert JSON string into an object


I am struggling with how to convert the following price quote JSON data into a C# object:

{"MyFeed":
{"@Provider":"SomeProvider","MMM":
    {"@name":"3M Corp","low":"194.80","high":"136.78","change":"2.80","pctchange":"0.22","ask":"135.15","bid_time":"20161104131845","bid":"134.80"}
}}

I created a C# class like so:

public class Quote
{
   public string Provider { get; set; }
   public Data Info { get; set; }
}

public class Data
{
  public string name { get; set; }
  public decimal low { get; set; }
  public decimal high { get; set; }
  public decimal change { get; set; }
  public decimal pctchange { get; set; }
  public decimal ask { get; set; }
  public DateTime bid_time { get; set; }
  public decimal bid { get; set; }
}

Then, in code, I am fetching the data using an HttpWebRequest, which runs just fine. But the step to deserialize the JSON data doesn't work.. It doesn't throw an error, it just has no data. That code is:

    var request = HttpWebRequest.Create(new Uri("<request URL here>")) as HttpWebRequest;
    request.Method = "POST";
    var response = request.GetResponse();
    using (Stream stream = response.GetResponseStream())
    {
        using (var reader = new StreamReader(stream))
        {
            Quote quote = JsonConvert.DeserializeObject<Quote>(reader.ReadToEnd());
            lblPrice.Text = string.Format("{0:c}", quote.Data.ask);
        }
    }

I stepped through the code, so I know the web request is working and returning a JSON string. I just don't know how to structure the C# class to accept the deserialized data. Help would be appreciated!


Solution

  • have you tried to use this json2csharp