2009-09-14 8 views
5

J'ai regardé ce Parsing JSON using Json.net question et réponse et c'est proche de ce dont j'ai besoin. La différence critique est que j'ai besoin d'analyser un tableau de paires x, y qui forment une ou plusieurs lignes par enregistrement. Voici un exemple de mon entréeJSON.NET et les tableaux en utilisant 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] 
     ] 
    ] 
    } 
} 
] 
} 

(Consultez http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/WaterTemplate/WaterDistributionNetwork/MapServer/9/query?outFields= * & où = OBJECTID% 3C20 & f = pjson pour la liste complète)

Ce que je dois faire est d'analyser les [ "caractéristiques"] ["geometry"] ["paths"] tableaux dans des lignes composées de paires x, y. Voici comment je reçois tous les chemins (un par « dossier » comme dans le tableau des caractéristiques):

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

Cela me donne mes chemins, à partir de laquelle je peux alors traiter chaque matrice de points à son tour:

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

C'est là que je suis bloqué. J'essaie différentes conversions à partir des instructions JArray et LINQ-y, mais je continue d'obtenir des résultats NULL ou des exceptions au réglage des valeurs JProperty child qui ne sont pas accessibles.

J'espère que quelqu'un a déjà traité de la conversion de tableaux de tableaux dans JSON.NET en utilisant LINQ et peut expliquer l'erreur stupide que je dois commettre, ou la réponse évidente que je ne vois pas.

Répondre

9

On dirait des chemins est un tableau de tableaux de points, donc en supposant que vous voulez un IEnumerable pour chaque chemin, vous avez besoin:

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

Vous cloué - je manquais les enfants() sur le p [ » chemins "] donc ma recherche de 4 heures pour la vérité est terminée. Merci beaucoup. – Dylan

Questions connexes