Search code examples
c#json-deserialization

reading HttpwebResponse in json format


I have doubt about how creating a class for receiving the response from HttpWebResponse.

The code I use for receiving a json response is:

using (var response = (HttpWebResponse)request.GetResponse())
        {
            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                JavaScriptSerializer js = new JavaScriptSerializer();
                var objText = reader.ReadToEnd();
                ResJson myojb = (ResJson )js.Deserialize(objText, typeof(ResJson ));
            }
        }

The json I receive is:

{
"name": "Rube Goldberg Machine Stage 1",
"published": true,
"description": "<p>.STEP Version\n<br /><br><a href=\"http://grabcad.com/cadfiles/rube-goldberg-experiment\">Rube Goldberg Experiment</a></p>",
"raw_description": ".STEP Version\r\nhttp://grabcad.com/cadfiles/rube-goldberg-experiment",
"cached_slug": "rube-goldberg-machine-stage-1",
"created_at": "2011-04-06T21:58:06Z",
"updated_at": "2017-05-02T07:44:08Z",
"preview_image": "https://d2t1xqejof9utc.cloudfront.net/screenshots/pics/08d3763d43243a1a5f88c89dbfb8910c/card.jpg",
"image_missing_url": "https://d2t1xqejof9utc.cloudfront.net/screenshots/pics/missing_small.png",
"likes_count": 9,
"downloads_count": 116,
"comments_count": 1,
"contentfiles_count": 3,
"top_comments_count": 1,
"video_link": "https://youtu.be/paDE3KO7eb0",
"author": {
    "name": "Scott Bruins",
    "cached_slug": "scott.bruins",
    "avatar": "https://d2t1xqejof9utc.cloudfront.net/members/avatars/320/feed.gif?1316795450"
},
"tags": [
    "machine",
    "rube",
    "goldberg",
    "crowdcad"
],
"softwares": [
    {
        "name": "Other",
        "cached_slug": "other"
    },
    {
        "name": "STL",
        "cached_slug": "stl"
    },
    {
        "name": "Rendering",
        "cached_slug": "rendering"
    }
]
}

When creating the ResJson class I can not figure out how set softwares variable type.

How should it be declared?


Solution

  • public class Software
    {
        [JsonProperty("name")]
        public string Name {get;set;}
    
        [JsonProperty("cached_slug")]
        public string CachedSlug {get;set;}
    }
    

    And then in your ResJson:

    {
        ...
        [JsonProperty("softwares")]
        public List<Software> Softwares {get;set;}
        ...
    }