来自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;
应该是正确的方法
答案 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]