将JSON数据转换为数组/在.NET中提取特定节点

时间:2015-05-09 14:51:38

标签: c# json vb.net

我有一个JSON数据,使用NewtonSoft JSON库,我无法将特定节点(坐标)提取到数组或列表。

这是我的JSON数据:

{
   "features":[
      {
         "type":"Feature",
         "geometry":{
            "type":"MultiPolygon",
            "coordinates":[
               [
                  [
                     [
                        28.9574884865954,
                        40.262043212854
                     ],
                     [
                        28.9577391646903,
                        40.2620393471008
                     ],
                     [
                        28.9581300766863,
                        40.2620333177299
                     ],
                     [
                        28.9581449735233,
                        40.261331625691
                     ],
                     [
                        28.9575062426388,
                        40.2613229341457
                     ],
                     [
                        28.9574884865954,
                        40.262043212854
                     ]
                  ]
               ]
            ]
         },
         "properties":{
            "ParselNo":"3",
            "SayfaNo":"6966",
            "Alan":"4.300,00",
            "Mevkii":"",
            "Nitelik":"Arsa",
            "CiltNo":"70",
            "Ada":"513",
            "Il":"Bursa",
            "Ilce":"Osmangazi",
            "Pafta":"H21b25d4b",
            "Mahalle":"Emek"
         }
      }
   ],
   "type":"FeatureCollection",
   "crs":{
      "type":"name",
      "properties":{
         "name":"EPSG:4326"
      }
   }
}

我不确定是否必须使用JsonConvert类或JsonParse类。

我“只”想要将包含lat / long值的“坐标”节点提取到一个定义良好的形式,如数组或C#或VB.NET中的列表。

1 个答案:

答案 0 :(得分:1)

在解析JSON时,您应该始终执行的第一个事情是转到http://json2csharp.com并让它为您生成类。在您的情况下,这些类是:

public class Geometry
{
    public string type { get; set; }
    public List<List<List<List<double>>>> coordinates { get; set; }
}

public class Properties
{
    public string ParselNo { get; set; }
    public string SayfaNo { get; set; }
    public string Alan { get; set; }
    public string Mevkii { get; set; }
    public string Nitelik { get; set; }
    public string CiltNo { get; set; }
    public string Ada { get; set; }
    public string Il { get; set; }
    public string Ilce { get; set; }
    public string Pafta { get; set; }
    public string Mahalle { get; set; }
}

public class Feature
{
    public string type { get; set; }
    public Geometry geometry { get; set; }
    public Properties properties { get; set; }
}

public class Properties2
{
    public string name { get; set; }
}

public class Crs
{
    public string type { get; set; }
    public Properties2 properties { get; set; }
}

public class RootObject
{
    public List<Feature> features { get; set; }
    public string type { get; set; }
    public Crs crs { get; set; }
}

现在可以使用JSON.NET反序列化:

var root = JsonConvert.DeserializeObject<RootObject>(json);

此时您已获得RootObject的实例。抓住你想要的任何财产价值。

修改

如果你想要坐标首先要注意(通过研究我上面发布的类,coordinates属于Geometry类。Geometry的一个实例class在Feature类中,RootObject类包含List<Feature>。因此,要转到coordinates,您需要遍历features并提取{每个人{1}}。

coordinates