Parse json string using JSON.NET Parse json string using JSON.NET asp.net asp.net

Parse json string using JSON.NET


You can use .NET 4's dynamic type and built-in JavaScriptSerializer to do that. Something like this, maybe:

string json = "{\"items\":[{\"Name\":\"AAA\",\"Age\":\"22\",\"Job\":\"PPP\"},{\"Name\":\"BBB\",\"Age\":\"25\",\"Job\":\"QQQ\"},{\"Name\":\"CCC\",\"Age\":\"38\",\"Job\":\"RRR\"}]}";var jss = new JavaScriptSerializer();dynamic data = jss.Deserialize<dynamic>(json);StringBuilder sb = new StringBuilder();sb.Append("<table>\n  <thead>\n    <tr>\n");// Build the header based on the keys in the//  first data item.foreach (string key in data["items"][0].Keys) {        sb.AppendFormat("      <th>{0}</th>\n", key);}sb.Append("    </tr>\n  </thead>\n  <tbody>\n");foreach (Dictionary<string, object> item in data["items"]) {    sb.Append("    <tr>\n");    foreach (string val in item.Values) {        sb.AppendFormat("      <td>{0}</td>\n", val);    }}sb.Append("    </tr>\n  </tbody>\n</table>");string myTable = sb.ToString();

At the end, myTable will hold a string that looks like this:

<table>    <thead>        <tr>            <th>Name</th>            <th>Age</th>            <th>Job</th>        </tr>    </thead>    <tbody>        <tr>            <td>AAA</td>            <td>22</td>            <td>PPP</td>        <tr>            <td>BBB</td>            <td>25</td>            <td>QQQ</td>        <tr>            <td>CCC</td>            <td>38</td>            <td>RRR</td>        </tr>    </tbody></table>


I did not test the following snippet... hopefully it will point you towards the right direction:

    var jsreader = new JsonTextReader(new StringReader(stringData));    var json = (JObject)new JsonSerializer().Deserialize(jsreader);    var tableRows = from p in json["items"]                 select new                 {                     Name = (string)p["Name"],                     Age = (int)p["Age"],                     Job = (string)p["Job"]                 };


If your keys are dynamic I would suggest deserializing directly into a DataTable:

    class SampleData    {        [JsonProperty(PropertyName = "items")]        public System.Data.DataTable Items { get; set; }    }    public void DerializeTable()    {        const string json = @"{items:["            + @"{""Name"":""AAA"",""Age"":""22"",""Job"":""PPP""},"            + @"{""Name"":""BBB"",""Age"":""25"",""Job"":""QQQ""},"            + @"{""Name"":""CCC"",""Age"":""38"",""Job"":""RRR""}]}";        var sampleData = JsonConvert.DeserializeObject<SampleData>(json);        var table = sampleData.Items;        // write tab delimited table without knowing column names        var line = string.Empty;        foreach (DataColumn column in table.Columns)                        line += column.ColumnName + "\t";                               Console.WriteLine(line);        foreach (DataRow row in table.Rows)        {            line = string.Empty;            foreach (DataColumn column in table.Columns)                                line += row[column] + "\t";                                               Console.WriteLine(line);        }        // Name   Age   Job            // AAA    22    PPP            // BBB    25    QQQ            // CCC    38    RRR        }

You can determine the DataTable column names and types dynamically once deserialized.