Десериализация JSON с Json.net C# - пробел в идентификаторах
Немного предыстории моего вопроса: я ищу десериализацию какого-то ужасного JSON в Json.net. Этот объект json создается ArcGIS Server и отправляет объект 'results', который отформатирован следующим образом:
{ "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" }
... у которого есть пробелы в некоторых идентификаторах; он генерируется псевдонимом поля 'pretty', а не именем таблицы данных. Я могу использовать 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, поэтому я, вероятно, допустил некоторые ошибки для школьников. Любые предложения приветствуются!
1 ответ
Чтение 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']");
Примечание: в JSon.Net до 2013 года он работал без какой-либо формы побега:
var pollingStation = (string)jObj.SelectToken("results[0].attributes.Polling Station");