JavascriptSerializer exception

pixartist picture pixartist · Apr 19, 2014 · Viewed 10.7k times · Source

I have the following data:

{"data":{"id":"7IaWnXo","title":null,"description":null,"datetime":1397926970,"type":"image/png","animated":false,"width":60,"height":60,"size":1277,"views":0,"bandwidth":0,"favorite":false,"nsfw":null,"section":null,"deletehash":"KYIfVnHIWWTPifh","link":"http://i.imgur.com/7IaWnXo.png"},"success":true,"status":200}

and I'm trying to serializer it into this:

public struct ImageInfoContainer
    {
        public ImageInfo data {get; set;}
        bool success { get; set; }
        string status { get; set; }
    }
    public struct ImageInfo
    {
        public string id {get; set;}
        public string title { get; set; }
        public string url { get; set; }
        public string description {get; set;}
        public string datetime {get; set;}
        public string type {get; set;}
        public string animated {get; set;}
        public int width {get; set;}
        public int height {get; set;}
        public int size {get; set;}
        public int views {get; set;}
        public int bandwidth {get; set;}
        public bool favourite {get; set;}
        public bool nsfw {get; set;}
        public string section {get; set;}
        public string deletehash {get; set;}
        public string link {get; set;}
    }

and I'm getting:

An exception of type 'System.InvalidOperationException' occurred in System.Web.Extensions.dll but was not handled in user code

Additional information: Cannot convert null to a value type.

What am I doing wrong?

Answer

Justin Iurman picture Justin Iurman · Apr 19, 2014

In your JSON data: nsfw is null.
But in ImageInfo struct, nsfw is defined as a boolean (it can't be null, only true or false)

You have 2 possibilities.

  • if you have access to JSON data, don't allow null for nsfw.
  • use a nullable bool: public bool? nsfw {get; set;}

If you take second option, this will allow you to have true, false or null as a value for nsfw and you won't have this error anymore.

Both Nullable<bool> and bool? are the same syntax.
More info about Nullable Types