如何使用属性名称中的空格反序列化 JSON?

How to deserialize JSON with spaces in the attribute 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\", ...

我创建了一个 public class 来根据我想要的特定属性(我不想要所有数据)来模板化字符串,但我不确定如何处理名称中的空格我想要的属性。

    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; }
    }

当我像这样用 class New_Events_Dataset 应用解串器时:

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

我最终返回了这样的东西。我做错了什么?

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

遗憾的是,密钥必须彼此完全匹配。
解决问题的最佳方法之一是为每个 属性 定义 JsonProperty 属性以正确获取反序列化对象。您可以用它指定 属性 的 json 键名。
您可以查看此问题及其答案以便更好地理解:

编辑:
正如评论中提到的那样,因为您使用的是 JavaScriptSerializer JsonPropertyAttribute 在这种情况下不起作用。 但是您可以通过添加 Newtonsoft.Json Nuget 包并以这种方式使用它的解串器来使用它:

JsonConvert.DeserializeObject<AzureResourceData>(jsonString);