Я просмотрел этот вопрос и ответ Разбор JSON с использованием Json.net, и он близок к тому, что Я нуждаюсь. Критическое отличие состоит в том, что мне нужно проанализировать массив пар x, y, которые образуют одну или несколько строк на запись. Вот пример моего ввода
{
"displayFieldName" : "FACILITYID",
"fieldAliases" : {
"FACILITYID" : "Facility Identifier",
},
"geometryType" : "esriGeometryPolyline",
"spatialReference" : {
"wkid" : 4326
},
"features" : [
{
"attributes" : {
"FACILITYID" : "",
"OBJECTID" : 1,
},
"geometry" :
{
"paths" :
[
[
[-80.3538239379999, 27.386884271],
[-80.3538100319999, 27.3868901900001],
[-80.3538157239999, 27.3869008510001]
]
]
}
},
{
"attributes" : {
"FACILITYID" : "",
"OBJECTID" : 2,
},
"geometry" :
{
"paths" :
[
[
[-80.3538239379999, 27.386884271],
[-80.3538295849999, 27.3868948420001]
]
]
}
}
]
}
(См. http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/WaterTemplate/WaterDistributionNetwork/MapServer/9/query?outFields= * & where = OBJECTID% 3C20 & f = pjson для полного списка)
Что мне нужно сделать, так это проанализировать массивы ["features"] ["geometry"] ["paths"] на строки, состоящие из пар x, y. Вот как я получаю все пути (по одному на «запись», как в массиве функций):
var allPaths = from p in jsonObject["features"].Children()["geometry"]
select p["paths"];
Это дает мне пути, по которым я могу обрабатывать каждый массив точек по очереди:
foreach (var eachPolylineInPath in allPaths)
{
IEnumerable<Point> linePoints = from line in eachPolylineInPath.Children()
select new Point(
(double) line[0],
(double) line[1],
double.NaN);
}
Вот где я застреваю. Я пробую различные приведения из операторов JArray и LINQ-y, но продолжаю получать нулевые результаты или исключения для настройки дочерних значений JProperty недоступны.
Надеюсь, кто-то уже имел дело с преобразованием массивов массивов в JSON.NET с помощью LINQ и может объяснить глупую ошибку, которую я должен делать, или очевидный ответ, который я не вижу.