我的代码工作正常,但我似乎无法到达树的更深部分.我正在尝试拉经度和纬度.下面的代码将状态"拉为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 = "maps.google/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:
在 json2csharp/ 中发布您的 JSON.获取生成的类并合并重复项,您会得到:
Post your JSON in json2csharp/. 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 粘贴为类 或 jsonutils/ 生成初始类型定义.)
(You could also use Paste JSON as Classes or jsonutils/ 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解析问题
发布评论