質問
この Json.netを使用したJSONの解析の質問と回答を見ました。必要なものに近い。重要な違いは、レコードごとに1行以上を形成する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のペアで構成される行に解析することです。すべてのパスを取得する方法は次のとおりです(features配列のように「レコード」ごとに1つ):
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ステートメントからのさまざまなキャストを試みていますが、nullの結果を取得し続けるか、JPropertyの子値にアクセスできないという例外が発生します。
うまくいけば、誰かがすでにLINQを使用してJSON.NETで配列の配列を変換し、私がしなければならない愚かな間違い、または私が見逃している明らかな答えを説明できることを願っています。
解決
パスはポイントの配列の配列のように見えるため、各パスにIEnumerableが必要な場合、次のものが必要です。
var allPaths = from p in jsonObject["features"].Children()["geometry"]
select p["paths"].Children();
所属していません StackOverflow