我有一个GeoJson,它包含多边形和多极子,从中我需要根据Id选择一个多边形。但我无法反序列化它,因为我无法设置C#类来绑定它。多边形具有结构:List<List<List<double>>>
而一个多极子是:List<List<List<List<double>>>>
我使用的是System.Text.Json。有什么办法做到这一点吗?
样品GeoJson:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "polygon",
"coordinates": [
[
[
7.6,
47.4
],...
]
]
},
"properties": {
"id":1
}
},
{
"type": "Feature",
"geometry": {
"type": "multipolygon",
"coordinates": [
[
[
[
7.4,
47.5
]
]
]
],...
让我们考虑以下json:
{
"type": "polygon",
"coordinates": [
[
[7.6,47.4],[2,3]
]
]
}
下面的类映射它:
public class X {
public List<List<List<decimal>>> coordinates {get; set;}
}
让我们测试一下:
var x = System.Text.Json.JsonSerializer.Deserialize<X>(json);
Console.WriteLine(x.coordinates[0][0][0]);
成功!打印:
7.6
我建议使用Newtonsoft.Json NuGet包。一旦您将JSON解析为JObject,您就可以简单地使用LINQ来查找所需的对象。
// if you need just one
jObject.Children().Where((jO) => jO["id"] == 1).First();
// if you need to loop over ones with the same id
foreach(JObject j in jObject.Children().Where((jO) => jO["id"] == 1))
{
}