Search code examples
c#jsonpocket

JSON to C# classes Issue


I am fairly new to working with JSON and I have a bit of an issue with a JSON response I am getting from a web service. I've tried a bunch of online "JSON to c# class" generators and none of them seem to work with this specific bit of JSON. I am working with the Pocket API and the response I get below. Can anyone point me in the right direction for formatting this in to classes?

    {
    "status": 1,
    "list": {
        "229279689": {
            "item_id": "229279689",
            "resolved_id": "229279689",
            "given_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-   preview",
            "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland",
            "favorite": "0",
            "status": "0",
            "resolved_title": "The Massive Ryder Cup Preview",
            "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview",
            "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.",
            "is_article": "1",
            "has_video": "1",
            "has_image": "1",
            "word_count": "3197",
            "images": {
                "1": {
                    "item_id": "229279689",
                    "image_id": "1",
                    "src": "http://a.espncdn.com/combiner/i?img=/photo/2012/0927/grant_g_ryder_cr_640.jpg&w=640&h=360",
                    "width": "0",
                    "height": "0",
                    "credit": "Jamie Squire/Getty Images",
                    "caption": ""
                }
            },
            "videos": {
                "1": {
                    "item_id": "229279689",
                    "video_id": "1",
                    "src": "http://www.youtube.com/v/Er34PbFkVGk?version=3&hl=en_US&rel=0",
                    "width": "420",
                    "height": "315",
                    "type": "1",
                    "vid": "Er34PbFkVGk"
                }
            }
        }
    }
}

Thanks for any pointers,


Solution

  • A little bit tricky, but this should work. ( Because of the property names like 229279689)

    var result = JsonConvert.DeserializeObject<Root>(json);
    

    public class MyImage
    {
        public string item_id { get; set; }
        public string image_id { get; set; }
        public string src { get; set; }
        public string width { get; set; }
        public string height { get; set; }
        public string credit { get; set; }
        public string caption { get; set; }
    }
    
    public class MyVideo
    {
        public string item_id { get; set; }
        public string video_id { get; set; }
        public string src { get; set; }
        public string width { get; set; }
        public string height { get; set; }
        public string type { get; set; }
        public string vid { get; set; }
    }
    
    public class MyListItem
    {
        public string item_id { get; set; }
        public string resolved_id { get; set; }
        public string given_url { get; set; }
        public string given_title { get; set; }
        public string favorite { get; set; }
        public string status { get; set; }
        public string resolved_title { get; set; }
        public string resolved_url { get; set; }
        public string excerpt { get; set; }
        public string is_article { get; set; }
        public string has_video { get; set; }
        public string has_image { get; set; }
        public string word_count { get; set; }
        public Dictionary<string, MyImage> images; // <---
        public Dictionary<string, MyVideo> videos; // <---
    }
    
    public class Root
    {
        public int status;
        public Dictionary<string, MyListItem> list; // <---
    }