Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse json string with JsonConvert c#

Tags:

I get a json string from an external web service. I would like to save the events from the events array in my database. How can I get List<FacebookEvents>?

My current attempt doesn't work: List< FacebookEvents > my_obj = JsonConvert.DeserializeObject < FacebookEvents > (jsonString);

Source json:

{
"events": [{
    "id": "163958810691757",
    "name": "3Bridge Records presents inTRANSIT w/ David Kiss, Deep Woods, Eric Shans",
    "coverPicture": "https://scontent.xx.fbcdn.net/t31.0-8/s720x720/13679859_10153862492796325_8533542782240254857_o.jpg",
    "profilePicture": "https://scontent.xx.fbcdn.net/v/t1.0-0/c133.0.200.200/p200x200/13872980_10153862492796325_8533542782240254857_n.jpg?oh=a46813bbf28ad7b8bffb88acd82c7c71&oe=581EF037",
    "description": "Saturday, August 20th.\n\nJoin the 3Bridge Records team for another night of sound and shenanigans - as we send Deep Woods & David Kiss out to Burning Man & belatedly celebrate Slav Ka's debut release on the label - \"Endless\" - out May 14th, featuring a remix by Mr. Shans.\n\nDavid Kiss (House of Yes)\nhttps://soundcloud.com/davidkiss\n\nDeep Woods (3Bridge Records)\nhttps://soundcloud.com/deep-woods\n\nEric Shans (3Bridge Records)\nhttps://soundcloud.com/eric-shans\n\nSlav Ka (3Bridge Records)\nhttps://soundcloud.com/slinkyslava\n\nFree before 12, $10 after (+ 1 comp well drink). $5 presale available on RA.\n\nhttps://www.residentadvisor.net/event.aspx?863815\n\nStay dope, Brooklyn.",
    "distance": "203",
    "startTime": "2016-08-20T22:00:00-0400",
    "timeFromNow": 481946,
    "stats": {
        "attending": 44,
        "declined": 3,
        "maybe": 88,
        "noreply": 1250
    },
    "venue": {
        "id": "585713341444399",
        "name": "TBA Brooklyn",
        "coverPicture": "https://scontent.xx.fbcdn.net/v/t1.0-9/s720x720/13932666_1397749103574148_4391608711361541993_n.png?oh=2d82be3a458d1ce9ac8fab47cdbc6e26&oe=585E6545",
        "profilePicture": "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/12049351_1300865083262551_8221231831784471629_n.jpg?oh=a30798841ad60dfe5cfabaa4e803c3ad&oe=5854DFB9",
        "location": {
            "city": "Brooklyn",
            "country": "United States",
            "latitude": 40.711217064583,
            "longitude": -73.966384349735,
            "state": "NY",
            "street": "395 Wythe Ave",
            "zip": "11249"
        }
    }
},
... 
],
"metadata": {
    "venues": 1,
    "venuesWithEvents": 1,
    "events": 4
}}




 class FacebookEvents
    {
        //[JsonProperty(PropertyName = "id")]
        public string id { get; set; }
        public string name { get; set; }
        public string coverPicture { get; set; }
        public string profilePicture { get; set; }
        public string description { get; set; }
        public string distance { get; set; }
        public string startTime { get; set; }
        public string timeFromNow { get; set; }
        public Stats stats { get; set; }

    }

    class Stats {
        public string attending { get; set; }
        public string declined { get; set; }
        public string maybe { get; set; }
        public string noreply { get; set; }

    }
    class Venue
    {
        public string id { get; set; }
        public string name { get; set; }
        public string coverPicture { get; set; }
        public string profilePicture { get; set; }
        public Location location { get; set; }

    }
    class Location
    {
        public string city { get; set; }
        public string country { get; set; }
        public string latitude { get; set; }
        public string longitude { get; set; }
        public string state { get; set; }
        public string street { get; set; }
        public string zip { get; set; }

    }
like image 728
LoZo Avatar asked Dec 06 '16 14:12

LoZo


People also ask

Does C# have a JSON parser?

Parse() method is an object class method and this method is used to parse the JSON string into the objects of C#. Based on the key value it parses the data of string and then it retrieves the data by using the key values.

What is Jsonconvert DeserializeObject C#?

DeserializeObject<T>(String,JsonConverter[]) Deserializes the JSON to the specified . NET type using a collection of JsonConverter. DeserializeObject(String, JsonSerializerSettings)

How do you convert a JSON string to a JSON deserialization?

A common way to deserialize JSON is to first create a class with properties and fields that represent one or more of the JSON properties. Then, to deserialize from a string or a file, call the JsonSerializer. Deserialize method.


2 Answers

You are missing to define your RootObject which Contains List<Event> and Metadata. Full Example

public class RootObject
{
    public List<Event> events { get; set; }
    public Metadata metadata { get; set; }
}

public class Stats
{
    public int attending { get; set; }
    public int declined { get; set; }
    public int maybe { get; set; }
    public int noreply { get; set; }
}

public class Location
{
    public string city { get; set; }
    public string country { get; set; }
    public double latitude { get; set; }
    public double longitude { get; set; }
    public string state { get; set; }
    public string street { get; set; }
    public string zip { get; set; }
}

public class Venue
{
    public string id { get; set; }
    public string name { get; set; }
    public string coverPicture { get; set; }
    public string profilePicture { get; set; }
    public Location location { get; set; }
}

public class Event
{
    public string id { get; set; }
    public string name { get; set; }
    public string coverPicture { get; set; }
    public string profilePicture { get; set; }
    public string description { get; set; }
    public string distance { get; set; }
    public string startTime { get; set; }
    public int timeFromNow { get; set; }
    public Stats stats { get; set; }
    public Venue venue { get; set; }
}

public class Metadata
{
    public int venues { get; set; }
    public int venuesWithEvents { get; set; }
    public int events { get; set; }
}

This will work:

var result = JsonConvert.DeserializeObject<RootObject>(jsonString); 

EDIT:

First this is JSON, here how you can take Venue information.

foreach(var item in result.events)
{
    Console.WriteLine(item.venue.name);
}
like image 51
mybirthname Avatar answered Sep 22 '22 16:09

mybirthname


you need a root object that has an events property to store the collection

public class RootObject {

    public IList<FacebookEvents> events {get;set;}

}

and then you will be able to access events

var root = JsonConvert.DeserializeObject<RootObject>(jsonString); 
var events = root.events;
like image 28
Nkosi Avatar answered Sep 22 '22 16:09

Nkosi