【问题标题】:C# google geolocation Api's administrative_area_level_2 value from JsonConvert.DeserializeObject来自 JsonConvert.DeserializeObject 的 C# google geolocation Api 的 Administrative_area_level_2 值
【发布时间】:2014-09-18 07:29:02
【问题描述】:

来自 C#,JsonConvert 我正在寻找 administrative_area_level_2 的谷歌地理定位 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;

正确的方法应该是什么

【问题讨论】:

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


    【解决方案1】:

    将您的 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"];
    

    【讨论】:

    • string name = 'obj' 这里的 obj 是什么
    • @user3226440 上述任何一种(或两种)建议的方法对您有用吗?
    【解决方案2】:

    如果您希望 JsonConvert.DeserializeObject 工作,您需要拥有相同的结构化对象和 DeserializeObject&lt;newObjectName&gt;

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

    您可以使用 :http://www.jsoneditoronline.org/ 以更可见的状态解析结果。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2016-10-22
      • 2013-07-15
      • 2020-08-11
      • 2014-10-12
      • 1970-01-01
      相关资源
      最近更新 更多