【问题标题】:How to deserialize JSON with spaces in the attribute names?如何用属性名称中的空格反序列化 JSON?
【发布时间】:2019-12-27 03:46:20
【问题描述】:

我有一个要反序列化的字符串数组。本质上,它只是一个对象列表。请注意,属性名称中有空格:

[    {        \"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; }
    }

当我像这样在我的班级 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}

【问题讨论】:

标签: c# asp.net json deserialization javascriptserializer


【解决方案1】:

不幸的是,键必须彼此完全匹配。
解决问题的最佳方法之一是为每个属性定义 JsonProperty 属性以正确获取反序列化对象。您可以使用它指定属性的 json 键名。
您可以看一下这个问题,它的答案是为了更好地理解: An example of JsonProperty

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

JsonConvert.DeserializeObject<AzureResourceData>(jsonString);

【讨论】:

  • JsonPropertyAttributejson.net 序列化程序使用,但 OP 正在使用 JavaScriptSerializerJsonPropertyAttribute 在这种情况下不起作用。
  • 是的。一旦我将"JsonConvert.DeserializeObject&lt;List&lt;New_Events_Dataset&gt;&gt;(strresult);"[JsonProperty("&lt;Exact Name")] 添加到我的类变量中,它就起作用了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
相关资源
最近更新 更多