我的问题的一些背景:我希望在Json.net中反序列化一些可怕的json。此json对象由ArcGIS Server创建,并发送一个“结果”对象,该对象的格式如下:
{ "results" : [ { "layerId" : 10, "layerName" : "Polling Districts", "value" : "MyWard", "displayFieldName" : "Ward", "attributes" : { "OBJECTID" : "61", "Ward" : "MyWard", "Polling Station" : "Childrens Resources Centre", "Polling District" : "E", "Constituency" : "South", "Shape" : "Polygon" } } ] }
现在问题是属性对象:
{ "OBJECTID" : "61", "Ward" : "MyWard", "Polling Station" : "Childrens Resources Centre", "Polling District" : "E", "Constituency" : "South", "Shape" : "Polygon" }
......在某些标识符中有空格;它是由'漂亮'字段别名生成的,而不是数据表名称。我可以使用linq selectToken来获取所有其他字段,但我正在寻找“投票站”。
我尝试了很多查询变体:
string pollingStation = (string)jObj.SelectToken("results[0].attributes[Polling Station]"); // Unexpected character while parsing path indexer: P
string pollingStation = (string)jObj.SelectToken("results[0].attributes[\"Polling Station\"]"); //Unexpected character while parsing path indexer: "
string pollingStation = (string)jObj.SelectToken("results[0].attributes.\"Polling Station\""); // No error, pollingStation is null
string pollingStation = (string)jObj.SelectToken("results[0].attributes.Constituency"); // No error, pollingStation is South (correct)
我用谷歌搜索,搜索了json.net帮助&阅读已经发布的相关问题 - 这些问题似乎都没有解决这个问题。也许我只是在密集。您也可以告诉我我不熟练使用c#或Linq,这是我第一次使用Json.net,所以我可能犯了一些小学生错误。欢迎任何建议!
答案 0 :(得分:2)
阅读JPath.ParseMain
中JPath.cs
代码的作用
var json = @"{ ""results"" : [ { ""layerId"" : 10, ""layerName"" : ""Polling Districts"", ""value"" : ""MyWard"", ""displayFieldName"" : ""Ward"", ""attributes"" : { ""OBJECTID"" : ""61"", ""Ward"" : ""MyWard"", ""Polling Station"" : ""Childrens Resources Centre"", ""Polling District"" : ""E"", ""Constituency"" : ""South"", ""Shape"" : ""Polygon"" } } ] }";
var jObj = JObject.Parse(json);
var pollingStation = (string)jObj.SelectToken("results[0].attributes.['Polling Station']");
备注:在2013年之前的JSon.Net中,它没有任何形式的转发工作:
var pollingStation = (string)jObj.SelectToken("results[0].attributes.Polling Station");