c# - C# 中的 Google Geocoding Json 解析问题

标签 c# json api geocoding

我的代码工作正常,但我似乎无法到达树的更深部分。我正在尝试拉经度和纬度。下面的代码将“状态”毫无问题地拉为“确定”(在响应的最后)。“几何”->“位置”->“纬度”和“经度”的语法是什么?

这是我的代码:

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"
  }

最佳答案

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

  1. http://json2csharp.com/ 中发布您的 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; }
    }
    

    (您也可以使用 Paste JSON as Classeshttps://jsonutils.com/ 来生成您的初始类型定义。)

  2. 使用 Json.NET 反序列化您的 JSON像这样:

        var root = JsonConvert.DeserializeObject<RootObject>(result);
    
  3. 您的查询返回了多个结果,因此您需要像这样遍历返回的位置:

        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.
        }
    

关于c# - C# 中的 Google Geocoding Json 解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28371365/

相关文章:

c# - 在 C# 库中转换 C# Web 应用程序——响应对象的问题

c# - Net Core app.UseMiddleware<T>() 和 app.Use(context, next) 之间的区别

c# - 在序列化中将长数字转换为字符串

json - Flutter 创建 API 请求并接收字符串 - 'Ä' 'Ö' 'Ü' 'ß'

c# - 根据参数类型调用函数

java - json 反序列化因格式有效而失败

php - 将 JSON 解码为 PHP 数组时丢失了一些数据

javascript - 从 Web api 获取数据时出现问题

python - Python 类名中的前导下划线

c# - 如何将 List<T> 传递给 T 实现的另一个类型列表