C#中的Google地理编码Json解析问题 [英] Google Geocoding Json Parsing Issue in C#

查看:16
本文介绍了C#中的Google地理编码Json解析问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have my code working fine, but I can't seem to be able to get to the deeper parts of the tree. I'm trying to pull the longitude and the latitude. The code below pulls 'status' no problem as 'OK" (at the very end of the response). What is the syntax for 'geometry' -> 'location' -> 'lat' and '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 生成的内容:

This is what the API generates:

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

推荐答案

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

Here are the steps to get what you want:

  1. http://json2csharp.com/ 中发布您的 JSON.获取生成的类并合并重复项,您会得到:

  1. Post your JSON in http://json2csharp.com/. Take the resulting classes and merge duplicates, and you get:

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

(您也可以使用 将 JSON 粘贴为类https://jsonutils.com/ 生成初始类型定义.)

(You could also use Paste JSON as Classes or https://jsonutils.com/ to generate your initial type definitions.)

使用 Json.NET 反序列化您的 JSON,如下所示:

Deserialize your JSON with Json.NET like so:

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

  • 您的查询返回了多个结果,因此您需要像这样遍历返回的位置:

  • There are multiple results returned for your query, so you need to loop through the locations returned like so:

        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#中的Google地理编码Json解析问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆