如何使用属性名称中的空格反序列化 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);
我有一个要反序列化的字符串数组。本质上,它只是一个对象列表。请注意,属性名称中有空格:
[ { \"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);