2009-09-14 15 views
5

Spojrzałem na to pytanie i odpowiedź Parsing JSON using Json.net i jest blisko tego, czego potrzebuję. Krytyczna różnica polega na tym, że muszę przeanalizować tablicę x, y par tworzących jedną lub więcej linii na rekord. Oto przykład z mojego wejściaJSON.NET i tablice używające LINQ

{ 
"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] 
     ] 
    ] 
    } 
} 
] 
} 

(Sprawdź http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/WaterTemplate/WaterDistributionNetwork/MapServer/9/query?outFields= * & gdzie = OBJECTID% 3C20 & f = pjson za pełną listę)

Co muszę zrobić, to analizować [ "cechy"] ["geometria"] ["ścieżki"] zawiera tablice składające się z par x, y. Oto jak ja dostaję wszystkich ścieżek (jeden za „rekord”, jak w tablicy funkcji):

var allPaths = from p in jsonObject["features"].Children()["geometry"] 
       select p["paths"]; 

To daje mi moje ścieżki, z której można następnie przetwarzać każdą tablicę punktową z kolei:

foreach (var eachPolylineInPath in allPaths) 
{ 
    IEnumerable<Point> linePoints = from line in eachPolylineInPath.Children() 
            select new Point(
                (double) line[0], 
                (double) line[1], 
                double.NaN); 
} 

Tam utknąłem. Próbuję różnych rzutów z instrukcji JArray i LINQ-y, ale wciąż otrzymuję wyniki zerowe lub nie można uzyskać dostępu do wyjątków dotyczących wartości wartości potomnych JProperty.

Mam nadzieję, że ktoś już zajmował się konwertowaniem tablic tablic w JSON.NET za pomocą LINQ i może wyjaśnić głupi błąd, który muszę popełnić, lub oczywistą odpowiedź, której nie widzę.

Odpowiedz

9

Wygląda ścieżek jest tablicą tablic punktu, więc zakładając chcesz IEnumerable dla każdej ścieżki, trzeba:

var allPaths = from p in jsonObject["features"].Children()["geometry"] 
       select p["paths"].Children(); 
+0

Jesteś przybity go - Brakowało mi the Children() na p [” ścieżki "], więc moje 4-godzinne poszukiwanie prawdy zostało zakończone. Dziękuję bardzo. – Dylan