C# 中的 Google 地理编码 Json 解析问题
Posted
技术标签:
【中文标题】C# 中的 Google 地理编码 Json 解析问题【英文标题】:Google Geocoding Json Parsing Issue in C# 【发布时间】:2015-04-06 22:12:49 【问题描述】:我的代码工作正常,但我似乎无法进入树的更深部分。我正在尝试拉经度和纬度。下面的代码将 '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"
【问题讨论】:
How to parse json in C#? 的可能重复项 尝试将 Json 粘贴到此页面:json2csharp.com MethodMan,谢谢。我已经看到了,但它没有帮助。聚会,因为我不知道我应该使用什么命名空间。我对我发布的内容很满意,因为它确实有效。 Lasse V. Karlsen,也谢谢你,但我无法理解它。如何将它们插入? 【参考方案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 Classes 或https://jsonutils.com/ 来生成初始类型定义。)
使用Json.NET 反序列化您的 JSON,如下所示:
var root = JsonConvert.DeserializeObject<RootObject>(result);
您的查询返回了多个结果,因此您需要像这样遍历返回的位置:
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.
【讨论】:
工作就像一个魅力。谢谢你这样拼写。我唯一要添加的是使这项工作正常工作的确切名称空间:Newtonsoft.Json。 很好的答案。不知道http://json2csharp.com/
的存在。很有用!【参考方案2】:
'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"];
【讨论】:
以上是关于C# 中的 Google 地理编码 Json 解析问题的主要内容,如果未能解决你的问题,请参考以下文章
在C#中通过使用Newtonsoft.Json库来解析天地图地理编码(GeoCoder)服务接口返回的Json格式的数据,以及HttpWebRequest 设置不完全时服务器返回“远程服务器返回错误:
C# Google 地理编码:即使遵循所需的步骤,也会不断拒绝权限
iPhone Google JSON Geocoing 解析