2009-09-14 12 views
5

Miré esta Parsing JSON using Json.net pregunta y respuesta, y está cerca de lo que necesito. La diferencia fundamental es que necesito analizar una matriz de pares x, y que forman una o más líneas por registro. He aquí un ejemplo de mi entradaJSON.NET y matrices utilizando 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] 
     ] 
    ] 
    } 
} 
] 
} 

(Salida http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/WaterTemplate/WaterDistributionNetwork/MapServer/9/query?outFields= * & donde = OBJECTID% 3C20 & f = pjson para el listado completo)

Lo que necesito hacer es analizar las [ "características"] ["geometry"] ["paths"] arrays en líneas compuestas de pares x, y. Así es como me estoy poniendo todos los caminos (uno por "registro", como en la matriz características):

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

Eso me da mis caminos, de la que entonces puedo procesar cada matriz de punto, a su vez:

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

Ahí es donde me quedo atascado. Estoy probando varios lanzamientos de sentencias de JArray y LINQ-y, pero continúo obteniendo resultados nulos o no se puede acceder a las excepciones de JProperty.

Afortunadamente, alguien ya se ha ocupado de convertir matrices de matrices en JSON.NET usando LINQ y puede explicar el estúpido error que debo cometer, o la respuesta obvia que no estoy viendo.

Respuesta

9

Parece que los caminos es una matriz de matrices de puntos, por lo que si quiere enviar un IEnumerable para cada ruta, se necesita:

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

Usted clavado - me estaba perdiendo los niños() en la p [" caminos "] entonces mi búsqueda de 4 horas para la verdad ha terminado. Muchas gracias. – Dylan

Cuestiones relacionadas