使用Json.NET解析Google Maps API返回的结果

时间:2011-09-22 13:39:08

标签: asp.net google-maps json.net

我正在尝试使用google map api的网络服务发出网络请求,并获取json字符串,然后获取输入地址所需的经度和纬度。

一切都很好。我得到了我需要的json字符串。

现在我正在使用Json.net来解析字符串。

我不知道为什么,但我根本无法将其转换为JArray

这是json字符串 enter image description here

有人可以教我如何编写c#代码以获取lat中的lnggeometry > location吗?

由于

这是我的代码和错误截图

enter image description here

2 个答案:

答案 0 :(得分:2)

使用JSON.NET解析JSON时,您有几个选择。

最好的选择,恕我直言,是使用序列化将对象拉回到一个结构化类型,你可以像任何其他类一样操作它。为此,您可以看到serialization in the JSON.NET documentation(如果不够清楚,我还可以发布更多详细信息)。

如果你想要的只是获取地址,正如你在问题中列出的那样,你也可以使用LINQ功能来获取该信息。您可以使用类似于以下内容的代码将其关闭(关键在于SelectToken方法以撤回您需要的详细信息。)

    Dim json As Newtonsoft.Json.Linq.JObject
    json = Newtonsoft.Json.Linq.JObject.Parse(jsonString)
    json.SelectToken("results.formatted_address").ToString()

您还可以使用Linq的所有正常功能来遍历您所期望的JSON。另请参阅LINQ文档。

答案 1 :(得分:1)

[我意识到这是一个古老的问题,但是有机会帮助别人......]

这里的问题是json["results"] 一个JArray,但你不是像一个人那样查询它。您需要使用数组索引来获取第一个(在这种情况下),然后您可以访问其中的对象。

string address = json["results"][0]["formatted_address"].Value<string>();

要获得纬度和经度,您可以这样做:

JToken location = json["results"][0]["geometry"]["location"];
double lat = location["lat"].Value<double>();
double lng = location["lng"].Value<double>();