kseen
kseen

Reputation: 397

Deserialize JSON into string

How can I deserialize:

{
    "data": [
        {"ForecastID":8587961,"StatusForecast":"Done"},
        {"ForecastID":8588095,"StatusForecast":"Done"},
        {"ForecastID":8588136,"StatusForecast":"Done"},
        {"ForecastID":8588142,"StatusForecast":"Pending"}
    ]
}

to

class RawData
{
    public string data { get; set; }
}

So, I just want to have

[
  {"ForecastID":8587961,"StatusForecast":"Done"},
  {"ForecastID":8588095,"StatusForecast":"Done"},
  {"ForecastID":8588136,"StatusForecast":"Done"},
  {"ForecastID":8588142,"StatusForecast":"Pending"}
]

as value of property data of RawData's class instance.

Upvotes: 2

Views: 467

Answers (2)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038890

It would have made far much more sense to deserialize this JSON structure to:

public class Forecast
{
    public IEnumerable<ForecastData> Data { get; set; }
}

public class ForecastData
{
    public int ForecastID { get; set; }
    public string StatusForecast { get; set; }
}

which is pretty trivial with the JavaScriptSerializer class that's built into the framework:

string json = "your JSON data here";
IEnumerable<ForecastData> data = new JavaScriptSerializer()
    .Deserialize<Forecast>(json)
    .Data;

or if you don't want to define models you could do that:

dynamic result = new JavaScriptSerializer().DeserializeObject(json);
foreach (var item in result["data"])
{
    Console.WriteLine("{0}: {1}", item["ForecastID"], item["StatusForecast"]);
}

Upvotes: 2

L.B
L.B

Reputation: 116138

Using Json.Net

var obj = (JObject)JsonConvert.DeserializeObject(json);
var newJson = obj["data"].ToString();

or using built-in JavaScriptSerializer

var dict = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json);
var newjson = new JavaScriptSerializer().Serialize(dict["data"]);

Upvotes: 4

Related Questions