2

I am not able to get my head around extracting the work_history, affiliations and current_loc of the facebook user from the JSON string that is generated after i run my fql query

I have made this class :

public class Data
{
    public CurrentLocation current_location { get; set; }
    public WorkHistory[] work_history { get; set; }
    public EducationHistory[] education_history { get; set; }
}

public class EducationHistory
{
    public string name { get; set; }
    public int? year { get; set; }
    public string school_type { get; set; }
}

public class WorkHistory
{
    public string company_name { get; set; }
    public Location location { get; set; }
}

public class CurrentLocation
{
    public string city { get; set; }
    public string state { get; set; }
    public string country { get; set; }
}

public class Location
{
    public string city { get; set; }
    public string state { get; set; }
}

The format of my JSON string is :

   {"current_location":{"city":"Delhi","state":"Delhi","country":"India","zip":"","id":102161913158207,"name":"Delhi, India"}

,"education_history":[{"name":"I E T , Alwar (Raj.)","year":2007,"concentrations":[],"school_type":"College"},{"name":"Institute of Engineering and Technology, Alwar","concentrations":[],"school_type":"College"}],

"work_history": [{"location":{"city":"","state":""},"company_name":"Defence Research & Development Organisation (DRDO)","description":"","start_date":"0000-00","end_date":"0000-00"}]}

How do i extract this Data i get a null when i use this code :

Data soap = JsonConvert.DeserializeObject<Data>(ser);

Edit : I did change the code according to what an answer suggested i still get no values

enter image description here

Edit 2: the solution that is provided would have worked if i had only one user however i have several users having these details how do i get this data? There are several like these values given below for different users

   {
    "data": [
        {
            "uid": 54456565,
            "name": "dgfg Barma",
            "pic_square": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash2/275277_513046358_147089990_q.jpg",
            "affiliations": [
                {
                    "nid": 33605704,
                    "name": "Our Lady Queen of the Missions School",
                    "type": "high school"
                }
            ],
            "birthday_date": null,
            "sex": "female",
            "relationship_status": null,
            "current_location": {
                "city": "Delhi",
                "state": "Delhi",
                "country": "India",
                "zip": "",
                "id": 102161913158207,
                "name": "Delhi, India"
            },
            "education_history": [
                {
                    "name": "Amity University",
                    "concentrations": [],
                    "school_type": "College"
                },
                {
                    "name": "Amity School of Engineering & Technology",
                    "concentrations": [],
                    "school_type": "College"
                }
            ],
            "work_history": []
        },
        {
            "uid": 520310824,
            "name": "Mamta Meena",
            "pic_square": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/370835_520310824_553662476_q.jpg",
            "affiliations": [],
            "birthday_date": "12/03/1986",
            "sex": "female",
            "relationship_status": "Married",
            "current_location": {
                "city": "Delhi",
                "state": "Delhi",
                "country": "India",
                "zip": "",
                "id": 102161913158207,
                "name": "Delhi, India"
            },
            "education_history": [
                {
                    "name": "I E T , Alwar (Raj.)",
                    "year": 2007,
                    "concentrations": [],
                    "school_type": "College"
                },
                {
                    "name": "Institute of Engineering and Technology, Alwar",
                    "concentrations": [],
                    "school_type": "College"
                }
            ],
            "work_history": [
                {
                    "location": {
                        "city": "",
                        "state": ""
                    },
                    "company_name": "Defence Research & Development Organisation (DRDO)",
                    "description": "",
                    "start_date": "0000-00",
                    "end_date": "0000-00"
                }
            ]
        },
        {
            "uid": 6565767,
            "name": "gfgfg Agarwal",
            "pic_square": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash2/372433_529863326_1656605196_q.jpg",
            "affiliations": [
                {
                    "nid": 16827518,
                    "name": "Amity University",
                    "type": "college"
                }
            ],
            "birthday_date": "07/18",
            "sex": "female",
            "relationship_status": null,
            "current_location": {
                "city": "Delhi",
                "state": "Delhi",
                "country": "India",
                "zip": "",
                "id": 102161913158207,
                "name": "Delhi, India"
            },
            "education_history": [
                {
                    "name": "Amity University, Noida",
                    "year": 2012,
                    "concentrations": [],
                    "school_type": "College"
                },
                {
                    "name": "Amity University",
                    "concentrations": [],
                    "school_type": "Grad School"
                }
            ],
            "work_history": []
        },
        {
            "uid": 542580357,
            "name": "bnnm Gupta",
            "pic_square": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/372576_542580357_1330958366_q.jpg",
            "affiliations": [],
            "birthday_date": "04/30",
            "sex": "female",
            "relationship_status": "Single",
            "current_location": {
                "city": "New Delhi",
                "state": "Delhi",
                "country": "India",
                "zip": "",
                "id": 106517799384578,
                "name": "New Delhi, India"
            },
            "education_history": [
                {
                    "name": "Amity University",
                    "concentrations": [],
                    "school_type": "College"
                },
                {
                    "name": "Amity University, Noida",
                    "concentrations": [],
                    "school_type": "College"
                }
            ],
            "work_history": [
                {
                    "location": {
                        "city": "",
                        "state": ""
                    },
                    "company_name": "Oracle India Pvt Ltd",
                    "position": "Intern",
                    "description": "",
                    "start_date": "2011-05"
                }
            ]
        },
        {
            "uid": 544204117,
            "name": "pos Gupta",
            "pic_square": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/275346_544204117_594313449_q.jpg",
            "affiliations": [
                {
                    "nid": 16827518,
                    "name": "Amity University",
                    "type": "college"
                }
            ],
            "birthday_date": "05/17/1990",
            "sex": "female",
            "relationship_status": "Single",
            "current_location": {
                "city": "Noida",
                "state": "Uttar Pradesh",
                "country": "India",
                "zip": "",
                "id": 130646063637019,
                "name": "Noida, India"
            },
            "education_history": [
                {
                    "name": "Amity University, Noida",
                    "year": 2012,
                    "concentrations": [],
                    "school_type": "College"
                },
                {
                    "name": "Amity University",
                    "concentrations": [],
                    "school_type": "Grad School"
                }
            ],
            "work_history": []
        },
        {
            "uid": 4567786,
            "name": "orr Makhijani",
            "pic_square": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/372443_555253796_244086438_q.jpg",
            "affiliations": [
                {
                    "nid": 16827518,
                    "name": "Amity University",
                    "type": "college"
                }
            ],
            "birthday_date": null,
            "sex": "female",
            "relationship_status": null,
            "current_location": null,
            "education_history": [
                {
                    "name": "Amity University",
                    "concentrations": [],
                    "school_type": "College"
                }
            ],
            "work_history": []
        },
        {
            "uid": 556773604,
            "name": "Nazima Khalid",
            "pic_square": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash2/372542_556773604_1472126324_q.jpg",
            "affiliations": [],
            "birthday_date": "03/22",
            "sex": "female",
            "relationship_status": "Married",
            "current_location": {
                "city": "Toronto",
                "state": "Ontario",
                "country": "Canada",
                "zip": "",
                "id": 110941395597405,
                "name": "Toronto, Ontario"
            },
            "education_history": [
                {
                    "name": "AMU",
                    "concentrations": [],
                    "school_type": "College"
                }
            ],
            "work_history": [
                {
                    "location": {
                        "city": "Oakville",
                        "state": "Ontario"
                    },
                    "company_name": "SNC-Lavalin Inc.",
                    "position": "Contracts",
                    "description": "",
                    "start_date": "0000-00"
                }
            ]
        }
    ]
}

Please help

vini
  • 4,657
  • 24
  • 82
  • 170

3 Answers3

4

Instead of declaring a lot of tiny classes I would go dynamic way. Here is the code for dynamic json object. And the usage would be something like this:

dynamic obj = JsonUtils.JsonObject.GetDynamicJsonObject(jsonString);

Console.WriteLine("{0} , {1}", obj.current_location.city, obj.current_location.state);

Console.WriteLine("EDUCATION");
foreach (var eduHist in obj.education_history)
{
    Console.WriteLine("{0} , {1}", eduHist.name, eduHist.year);
}

Console.WriteLine("WORK");
foreach (var workHist in obj.work_history)
{
    Console.WriteLine("{0}  {1}-{2}", workHist.company_name, workHist.start_date, workHist.end_date);
}
L.B
  • 114,136
  • 19
  • 178
  • 224
  • My code is not able to read JsonUtils what namespace does it belong to? – vini Feb 18 '12 at 15:16
  • you can use this: dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(json); as explained on http://stackoverflow.com/questions/8738031/deserializing-json-using-json-net-with-dynamic-data – dc2009 Apr 17 '13 at 09:40
2

You need to use correct property names that match your JSON structure:

using System;
using Newtonsoft.Json;

public class Data
{
    public CurrentLocation current_location { get; set; }
    public WorkHistory[] work_history { get; set; }
    public EducationHistory[] education_history { get; set; }
}

public class EducationHistory
{
    public string name { get; set; }
    public int? year { get; set; }
    public string school_type { get; set; }
}

public class WorkHistory
{
    public string company_name { get; set; }
    public Location location { get; set; }
}

public class CurrentLocation
{
    public string city { get; set; }
    public string state { get; set; }
    public string country { get; set; }
}

public class Location
{
    public string city { get; set; }
    public string state { get; set; }
}

class Program
{
    static void Main()
    {
        var json = 
        @"
        {
            ""current_location"": {
                ""city"": ""Delhi"",
                ""state"": ""Delhi"",
                ""country"": ""India"",
                ""zip"": """",
                ""id"": 102161913158207,
                ""name"": ""Delhi, India""
            },
            ""education_history"": [
                {
                    ""name"": ""I E T , Alwar (Raj.)"",
                    ""year"": 2007,
                    ""concentrations"": [],
                    ""school_type"": ""College""
                },
                {
                    ""name"": ""Institute of Engineering and Technology, Alwar"",
                    ""concentrations"": [],
                    ""school_type"": ""College""
                }
            ],
            ""work_history"": [
                {
                    ""location"": {
                        ""city"": """",
                        ""state"": """"
                    },
                    ""company_name"": ""Defence Research & Development Organisation (DRDO)"",
                    ""description"": """",
                    ""start_date"": ""0000-00"",
                    ""end_date"": ""0000-00""
                }
            ]
        }";

        Data soap = JsonConvert.DeserializeObject<Data>(json);
        Console.WriteLine(soap.current_location.city);
    }
}

As far as the affiliations property is concerned, I don't see any relation to it with your JSON, so I simply removed it from the Data object and replaced it with the EducationHistory type.


UPDATE:

And to handle multiple nodes you could adapt your models:

public class Result
{
    public Data[] data { get; set; }
}

public class Data
{
    public CurrentLocation current_location { get; set; }
    public WorkHistory[] work_history { get; set; }
    public EducationHistory[] education_history { get; set; }
}

public class EducationHistory
{
    public string name { get; set; }
    public int? year { get; set; }
    public string school_type { get; set; }
}

public class WorkHistory
{
    public string company_name { get; set; }
    public Location location { get; set; }
}

public class CurrentLocation
{
    public string city { get; set; }
    public string state { get; set; }
    public string country { get; set; }
}

public class Location
{
    public string city { get; set; }
    public string state { get; set; }
}

and then:

Result soap = JsonConvert.DeserializeObject<Result>(json);
Console.WriteLine(soap.data[0].current_location.city);
Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
0

Here's another example that's working for retrieving id, name, picture and friends. You must include reference to newtonsoft.json package.

[TestClass]
public class FbRequestParserTests
{
    [TestMethod]
    public void ParseFacebookResponse()
    {
        var response =
            @"{
              ""id"": ""123123"",
              ""name"": ""My name"",
              ""picture"": {
                            ""data"": {
                                ""is_silhouette"": false,
                                ""url"": ""https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/14572785_123""
                            }
                        },
              ""friends"": {
                ""data"": [
                    {
                    ""name"": ""Friend 1"",
                    ""id"": ""123""
                  },
                  {
                    ""name"": ""Friend 2"",
                    ""id"": ""234""
                  }
                ],
                ""paging"": {
                  ""cursors"": {
                    ""before"": ""QVFIUk1yRE9zTkhFdkc1TFV2SHVpaE1IYUJ4V2ljbUJSbjYxaGhnX05IcTNYWHp0ekNHZAnh6LThs"",
                    ""after"": ""QVFIUjFFQW5kVmJiTmMxZAHN6cWNDdUl5VnVJVl91UG0yV2hMOVl5N21GTDVxQ2JVQ2hjQVlRYXBxNDNkWWI3YjZAkZAFBV""
                  }
                },
                ""summary"": {
                  ""total_count"": 456
                }
              }
            }";

        var result = JsonConvert.DeserializeObject<FbResponse>(response);

        Assert.AreEqual(result.Id, 123123);
        Assert.AreEqual(result.Name, "My Name");
    }
}

public class FbResponse
{
    public long Id { get; set; }
    public string Name { get; set; }
    public Picture Picture { get; set; }
    public Friends Friends { get; set; }
}
public class Friends
{
    public List<FriendsData> Data { get; set; }
    public Paging Paging { get; set; }
    public Summary Summary { get; set; }
}
public class Summary
{
    public int Total_Count { get; set; }
}
public class Paging
{
    public Cursors Cursors { get; set; }
}
public class Cursors
{
    public string Before { get; set; }
    public string After { get; set; }
}
public class FriendsData
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class Picture
{
    public PictureData Data { get; set; }
}
public class PictureData
{
    public bool Is_Silhouette { get; set; }
    public string Url { get; set; }
}
Leo
  • 398
  • 2
  • 8