gpt4 book ai didi

c# - JSON.NET 和数组使用 LINQ

转载 作者:太空狗 更新时间:2023-10-29 22:35:17 25 4
gpt4 key购买 nike

我看了这个Parsing JSON using 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 子值的异常。

希望有人已经处理过使用 LINQ 在 JSON.NET 中转换数组的数组,并且可以解释我必须犯的愚蠢错误,或者我没有看到的明显答案。

最佳答案

看起来 paths 是点数组的数组,所以假设你想要每个路径的 IEnumerable,你需要:

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

关于c# - JSON.NET 和数组使用 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1423523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com