json ="{
"data": [
{
"id": "1000",
"from": {
"name": "Anthony Waema",
"category": "message",
"id": "192"
},
"message": "this is the message",
"updated_time": "2001-05-06T19:34:15+0000",
"likes": {
"data": [
{
"id": "100001692250255",
"name": "\u00dcnal Turanl\u0131"
},
{
"id": "100001060078996",
"name": "S\u00e9f\u00e2 K\u00e2ql\u00e4Nn"
}]
},
{
"id": "10150186255753553",
"from": {
"name": "another name",
"category": "message",
"id": "100001"
},
"message": "this is the message",
"updated_time": "2001-04-06T19:34:15+0000",
"likes": {
"data": [
{
"id": "1002345",
"name": "\u00dcnal Turanl\u0131"
},
{
"id": "100234",
"name": "S\u00e9f\u00e2 K\u00e2ql\u00e4Nn"
}]
}
}
]
}";
public class Allstatus
{
public List<sdata> data { get; set; }
public scpaging paging { get; set; }
}
public class sdata
{
public string id { get; set; }
public sfrom from { get; set; }
public string message { get; set; }
public string updated_time {get; set;}
public List<likesdata> likes { get; set; }
}
public class likesdata
{
public string id{ get; set; }
public string name{ get; set; }
}
public class sfrom
{
public string name {get; set;}
public string category {get; set;}
public string id {get; set;}
}
JavaScriptSerializer ser = new JavaScriptSerializer();
page = ser.Deserialize<allstatus>(json);
foreach (sdata cd in page.data)
{
foreach(likesdata ld in cd.likes.data)
{
Console.WriteLine(ld.id+"\t"+ld.name);
}
}
problem:
I need to parse the json and retrieve likes data.
I can access “from” data but not “likes” data.. I get nullreference error when I do this. help needed here.. Thanks.
Edit2:
Referring https://gist.github.com/973510, its clear from the returned json, that if a particular facebook message doesnt have any likes, then the returned json doesnt contain a property called
likes. Hencelikesproperty ofsdata objectis null. Thats just how the server returns the data.There are two ways you can deal with this. Either do a manual check whether
likesis null. Or initialize the likes property in the sdata constructor. And initialize the likesdata list in the likesdatacollection constructor.Code:
This way, even if fb doesnt return any likes, the constructors will initialize the properties, so they will not be null. You can then check whether
likes.data.Count > 0. If yes, then fb returned likes, else fb didnt return likes.Edit1:
From the OP’s comment, its clear that the json is properly formed. Meaning, the json is as retrieved from some server api. Therefore it is the
sdataclass that is the culprit. Please look at this gist for the full solution.The short version. For the simplest case, your c# classes need to follow the exact same structure as your json. As per the json,
datahas a property calledlikes. thelikesobject has a property calleddatawhich is an array of objects with properties id and name.So your c# class
sdatashould have a property calledlikesof typelikesdatacollection. This class should have a propertydataof typeList<likesdata>…Off topic, people generally seem to prefer Json.Net … so you may want to use that. The reason I use it is because I need it to work in a .Net 2.0 code base …