来自JsonConvert.DeserializeObject的C#google geolocation Api的administrative_area_level_2值

时间:2014-09-18 07:29:02

标签: c# .net google-maps google-api

来自C#,JsonConvert我希望获得administrative_area_level_2的Google地理位置api值 - > long_name

 http://maps.googleapis.com/maps/api/geocode/json?address=T1X%200L3&sensor=true

我正在尝试的是: -

dynamic part = JsonConvert.DeserializeObject(responseJson);
    string name = part.results.address_components.types.administrative_area_level_2;

应该是正确的方法

2 个答案:

答案 0 :(得分:2)

将您的JSON粘贴到json2csharp并在项目中创建所有建议的类。然后我们可以将json字符串反序列化为RootObject并轻松地从强类型对象访问JSON的任何部分,例如:

var root = JsonConvert.DeserializeObject<RootObject>(responseJson);
var address_type = "administrative_area_level_2";
string name = root.results[0]
                  .address_components
                  .FirstOrDefault(o => o.types.Contains(address_type))
                  .long_name;

您也可以在不创建新类的情况下完成此任务:

var root = JObject.Parse(responseJson);
var address_type = "administrative_area_level_2";
string name = root["results"][0]
                  ["address_components"]
                  .FirstOrDefault(a => (a["types"]).Select(t => (string)t)
                                                   .Contains(address_type))
                  ["long_name"];

答案 1 :(得分:1)

如果你想让JsonConvert.DeserializeObject工作,你需要拥有相同的结构化对象,DeserializeObject<newObjectName>就可以了。

结果对象似乎并不复杂: 对象列表可以是Arrays或ILists。

您可以使用:http://www.jsoneditoronline.org/将结果解析为更易查看的状态。

如果您想要访问的方式(更不优雅的方式),您可以尝试:

part["result"]["..."][0]