How to obtain values in JSON in C#?

10,918

Solution 1

I got it working...

var postTitles = from p in JO["data"].Children()
                             select new
                             {
                                 Names = (string)p["from"]["name"],
                                 Msg = (string)p["message"],
                             };

Using this LINQ i can access the required data.

Solution 2

I haven't used the LINQ to JSON API, but if you don't insist on using it you can simply create a class that models the data in your JSON payload and then use the following method:

Newtonsoft.Json.JsonConvert.DeserializeObject<YourDataModelClass>()

Solution 3

you need to deseriralise the json string as shown below

public static T Deserialise<T>(string json)
{
    using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
    {
        var serialiser = new DataContractJsonSerializer(typeof(T));
        return (T)serialiser.ReadObject(ms);
    }
}

Return type is you class

public class MyData
{
  public string id { get; set;}
  public string name{ get; set;}
  public string message{ get; set;}
}

you can check full details : Parse JSON in C#

Share:
10,918
CracLock
Author by

CracLock

A hard c# programmer...

Updated on June 04, 2022

Comments

  • CracLock
    CracLock almost 2 years

    i have json string as :

        {
           "data": [
              {
                 "id": "100000045402409_310121622373595",
                 "from": {
                    "name": "Ritesh Ranjan",
                    "id": "100000045402409"
                 },
                 "message": "greatttttttttttttt ab jaooooooooo",
                 "picture": "http://external.ak.fbcdn.net/safe_image.php?d=AQAGY5rsr5AeM5PI&w=90&h=90&url=http\u00253A\u00252F\u00252Fwww.ndtv.com\u00252Fnews\u00252Fimages\u00252Ftopstory_thumbnail\u00252FChidambaram_2G_120.jpg",
                 "link": "http://www.ndtv.com/article/india/2g-scam-chidambaram-verdict-expected-shortly-huge-implications-for-govt-173168",
                 "name": "2G scam: Chidambaram verdict expected shortly, huge implications for govt",
                 "caption": "www.ndtv.com",
                 "description": "A Delhi court handling the 2G spectrum allocation scam trial is likely to decide today whether Union Home Minister P Chidambaram should be made a co-accused in the case for allegedly allowing former Telecom Minister A Raja to gift mobile network licenses and scarce second-generation or 2G spectrum a...",
                 "icon": "http://static.ak.fbcdn.net/rsrc.php/v1/yD/r/aS8ecmYRys0.gif",
                 "type": "link",
                 "application": {
                    "name": "Links",
                    "id": "2309869772"
                 },
                 "created_time": "2012-02-04T11:02:22+0000",
                 "updated_time": "2012-02-04T11:02:22+0000"
              },
              {
                 "id": "100003303253347_132959650157476",
                 "from": {
                    "name": "Suman Dey",
                    "id": "100003303253347"
                 },
                 "message": "Check out this article I was reading on biNu. 2G verdict: Chidambaram off the hook, government exhales",
                 "type": "status",
                 "application": {
                    "name": "biNu",
                    "canvas_name": "binuapp",
                    "namespace": "binuapp",
                    "id": "378628085054"
                 },
                 "created_time": "2012-02-04T10:54:19+0000",
                 "updated_time": "2012-02-04T10:54:19+0000"
              },
    .....
    //Continued...
    

    Now i want to parse it using c#

    i have used :

        WebClient client = new WebClient();
                    string Json = client.DownloadString("https://graph.facebook.com/search?q=2g+verdict+Chidambaram&type=post");
                    System.IO.StreamWriter SW = new System.IO.StreamWriter(JsonDestFile);
                    SW.WriteLine(Json);
    
                    System.IO.StreamWriter SW1 = new System.IO.StreamWriter(ValuesDestFile);
    
                    JObject o = JObject.Parse(Json);
    var postTitles = from p in o["data"].Children()["from"]
                                 select    p["name"].Values<string>();
    
                            foreach (var item in postTitles)
                            {
                                SW1.WriteLine(item);
                            }
                    SW1.WriteLine(name);
    

    But i am not able to get any name values at all.

    Its giving me error : Cannot access child value on Newtonsoft.Json.Linq.JValue.

    Please suggest me how can i parse the above json for values of id, name, id (from one) , message