gwydion93
gwydion93

Reputation: 1923

How to deserialize JSON with spaces in the attribute names?

I have a string array that I want to deserialize. Essentially, it is just a list of objects. Note that the attributes have spaces in the names:

[    {        \"Event Name\": \"Hurricane Irma PR\",        \"Storm Start (LST)\": \"2017-08-30\",        \"Storm End (LST)\": \"2017-09-13\",        \"Grid Cell Number\": 16412,        \"Grid Cell State\": \"PR\",        \"Grid Cell Name\": \"Grid26_0\", ...

I created a public class to template the string based on specific attributes that I want ( I don't want all the data) but I am not sure how to handle for the spaces in the names of the attributes that I want.

    public class New_Events_Dataset
    {
        public string EventName { get; set; }
        public string StormStart { get; set; }
        public string StormEnd { get; set; }
        public string GridCellState { get; set; }
        public string GridCellName { get; set; }
        public string USGSGageSiteNo { get; set; }
        public string ReturnPeriodatGridCell { get; set; }
    }

When I apply the deserializer with my class New_Events_Dataset like this:

    var jsonResponse = returnJson.Deserialize<List<New_Events_Dataset>>(strresult);
    string json = new JavaScriptSerializer().Serialize(jsonResponse);
                return json;

I end up returning something like this. What am I doing wrong?

[{"EventName":null,"StormStart":null,"StormEnd":null,"GridCellState":null,"GridCellName":null,"USGSGageSiteNo":null,"ReturnPeriodatGridCell":null}

Upvotes: 1

Views: 5001

Answers (1)

SSgumS
SSgumS

Reputation: 76

Unfortunately keys must match exactly each other.
One of the best ways to solve your problem is to define JsonProperty attribute for each property to get Deserialized object correctly. You can specify property's json key name with it.
You can take a look to this question and it's answer for better understanding: An example of JsonProperty

Edit:
As in comments mentioned, because you are using JavaScriptSerializer JsonPropertyAttribute doesn't work in this situation. But you can use it by adding Newtonsoft.Json Nuget Package and using it's deserilizer this way:

JsonConvert.DeserializeObject<AzureResourceData>(jsonString);

Upvotes: 4

Related Questions