C# Google地理编码Json解析问题的C语言实现#

C# Google地理编码Json解析问题的C语言实现#,c#,json,api,geocoding,C#,Json,Api,Geocoding,我的代码运行良好,但我似乎无法深入到树的更深处。我试着拉经度和纬度。下面的代码将“status”提取为“OK”(在响应的最后)没有问题。“geometry”->“location”->“lat”和“lng”的语法是什么 这是我的密码: string RawAddress = "163 Leektown Road, New Gretna, NJ 08004"; string Address = RawAddress.Replace(" ", "+"); string AddressURL = "h

我的代码运行良好,但我似乎无法深入到树的更深处。我试着拉经度和纬度。下面的代码将“status”提取为“OK”(在响应的最后)没有问题。“geometry”->“location”->“lat”和“lng”的语法是什么

这是我的密码:

string RawAddress = "163 Leektown Road, New Gretna, NJ 08004";
string Address = RawAddress.Replace(" ", "+");
string AddressURL = "http://maps.google.com/maps/api/geocode/json?address=" + Address;
var result = new System.Net.WebClient().DownloadString(AddressURL);
dynamic data = JObject.Parse(result);

Lat.Text = data.status;
这是API生成的内容:

{
   "results" : [
  {
     "address_components" : [
        {
           "long_name" : "Mountain View",
           "short_name" : "Mountain View",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Santa Clara County",
           "short_name" : "Santa Clara County",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "California",
           "short_name" : "CA",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "United States",
           "short_name" : "US",
           "types" : [ "country", "political" ]
        }
     ],
     "formatted_address" : "Mountain View, CA, USA",
     "geometry" : {
        "bounds" : {
           "northeast" : {
              "lat" : 37.4508789,
              "lng" : -122.0446721
           },
           "southwest" : {
              "lat" : 37.3567599,
              "lng" : -122.1178619
           }
        },
        "location" : {
           "lat" : 37.3860517,
           "lng" : -122.0838511
        },
        "location_type" : "APPROXIMATE",
        "viewport" : {
           "northeast" : {
              "lat" : 37.4508789,
              "lng" : -122.0446721
           },
           "southwest" : {
              "lat" : 37.3567599,
              "lng" : -122.1178619
           }
        }
     },
     "partial_match" : true,
     "types" : [ "locality", "political" ]
  }
  ],
  "status" : "OK"
  }

以下是获取所需内容的步骤:

  • 发布JSON。获取结果类并合并重复项,您将获得:

    public class AddressComponent
    {
        public string long_name { get; set; }
        public string short_name { get; set; }
        public List<string> types { get; set; }
    }
    
    public class Bounds
    {
        public Location northeast { get; set; }
        public Location southwest { get; set; }
    }
    
    public class Location
    {
        public double lat { get; set; }
        public double lng { get; set; }
    }
    
    public class Geometry
    {
        public Bounds bounds { get; set; }
        public Location location { get; set; }
        public string location_type { get; set; }
        public Bounds viewport { get; set; }
    }
    
    public class Result
    {
        public List<AddressComponent> address_components { get; set; }
        public string formatted_address { get; set; }
        public Geometry geometry { get; set; }
        public bool partial_match { get; set; }
        public List<string> types { get; set; }
    }
    
    public class RootObject
    {
        public List<Result> results { get; set; }
        public string status { get; set; }
    }
    

  • “geometry”->“location”->“lat”和“lng”的语法为:

    JObject data = JObject.Parse(result);
    
    string lat = (string)data["results"][0]["geometry"]["location"]["lat"];
    string lng = (string)data["results"][0]["geometry"]["location"]["lng"];
    

    尝试将Json粘贴到此页面的可能重复:MethodMan,谢谢。我看到了,但没有帮助。聚会是因为我不知道应该使用什么名称空间。我对我发布的内容很满意,因为它确实有效。Lasse V.Karlsen,也谢谢你,但我不知道它的头尾。我如何插入这些名称空间?工作I’我想要一个符咒。谢谢你这么说。我唯一要添加的是使这项工作起作用的确切名称空间:Newtonsoft.Json。回答得很好。我不知道
    http://json2csharp.com/
    。非常有用!
        foreach (var singleResult in root.results)
        {
            var location = singleResult.geometry.location;
            var latitude = location.lat;
            var longitude = location.lng;
            // Do whatever you want with them.
        }
    
    JObject data = JObject.Parse(result);
    
    string lat = (string)data["results"][0]["geometry"]["location"]["lat"];
    string lng = (string)data["results"][0]["geometry"]["location"]["lng"];