C# 中的 Google 地理编码 Json 解析问题

2024-03-17

我的代码运行良好,但我似乎无法到达树的更深部分。我正在尝试拉动经度和纬度。下面的代码将“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"
  }

以下是获得您想要的东西的步骤:

  1. 将您的 JSON 发布到http://json2csharp.com/ http://json2csharp.com/。获取生成的类并合并重复项,您将得到:

    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; }
    }
    

    (您也可以使用将 JSON 粘贴为类 https://stackoverflow.com/q/18526659/3744182 or https://jsonutils.com/ https://jsonutils.com/生成您的初始类型定义。)

  2. 反序列化你的 JSONJson.NET http://www.newtonsoft.com/json像这样:

        var root = JsonConvert.DeserializeObject<RootObject>(result);
    
  3. 您的查询返回多个结果,因此您需要循环返回的位置,如下所示:

        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.
        }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的 Google 地理编码 Json 解析问题 的相关文章

随机推荐

  • 在 XAML 中绑定 MapIcon

    我正在尝试使用 MapControl 显示当前查看位置的 MapIcon 在我的 XAML 中 我有
  • 模拟集成测试

    如何模拟集成测试所需的众多依赖项 我使用 Mockito 进行 纯 单元测试 在这种情况下 纯粹 意味着测试单个类 模拟它的所有依赖项 美丽的 现在进行集成测试 假设在这种情况下 集成测试将测试如下内容 消息被放入队列中 消息已 处理 响应
  • 如何在 WooCommerce 中创建多个具有相同 SKU 的简单产品?

    我想在 WooCommerce 中创建多个具有相同 SKU 的简单产品 我在管理设置中搜索 但找不到任何启用此功能的设置 有没有什么钩子可以让我禁用这个功能 如果您想完全禁用 SKU 功能 那么您必须使用wc product sku ena
  • 测试飞行组 - 如何将构建发送到组?

    苹果在 TestFlight Groups 上的公告称 将您的测试人员分组以快速发送构建 提供 单独说明要关注的位置 并将操作应用于 TestFlight 中同时有多位测试人员 我该怎么做呢 我已经设置了我的组 我的版本已上传并通过了 Be
  • 不平衡学习:导入错误:无法导入名称“MultiOutputMixin”

    我已经重新安装了最新的 scikit learn 和不平衡学习 我还检查了所有其他库 以确保它们与不平衡学习兼容 我只想运行一个简单的RandomOverSample 但我收到以下导入错误消息 import imblearn from im
  • 有没有办法可以判断 SMTP 服务器是否期望客户端使用“隐式”SSL 与“显式”SSL 进行连接?

    SSL 可以是 显式 或 隐式 如以下链接所述 http help globalscape com help secureserver2 Explicit versus implicit SS htm http help globalsca
  • 子动态创建的组件与父组件之间的 Angular4 通信

    我有一个 Angular4 组件 一旦用户按下加号按钮 它就会动态创建许多子组件 子组件有一个输入选择 必须在选项选择后向父组件发送信息 子组件由 ComponentFactoryResolver 创建 如下所示 let component
  • 当 defaultRender 设置为非常基本的 ArcRendererConfig() 时,Flutter GoogleChart 饼图不会渲染

    图表按预期显示使用以下饼图小部件 class ABCPieChart extends StatefulWidget override ABCPieChartState createState gt ABCPieChartState clas
  • 在 Silverlight 应用程序中呈现 HTML 内容

    在我们的应用程序之一中 需要在 Silverlight 2 0 容器之一中显示项目符号列表 我们决定使用 HTML 标记文本来实现同样的目的 虽然 Google 上有很多可用的选项 例如覆盖 HTML div 容器等 但我想知道最可行的方法
  • 保存 python TempFile 的快速方法?

    我在用tempfile TemporaryFile进行一些中间处理 该程序在关闭时很好地为我删除了临时文件 这正是我大多数时候想要的行为 但是 有没有办法保存文件以供在发生 陷入 错误或其他异常情况时进行检查 寻找开始并使用shutil c
  • 使用 PHP 获取和存储信用卡信息的最佳实践

    我是否应该在前几个步骤 验证 审查购买 中使用会话 然后在最终提交中将信息输入到数据库中 饼干会被劫持并演变为诉讼吗 是不是风险太大了 如果存储信用卡号 我是否需要以任何特殊方式保护我的数据库 欢迎任何建议和个人经历 信用卡问题对于存储信用
  • Laravel 每个用户一次会话

    我正在尝试找出如何只允许每个用户一个会话 因此 如果有人在已经登录其用户帐户的情况下尝试登录 第一个会话将被销毁 并将被注销以仅允许当前会话 我正在关注这个 如何在 Laravel 中保持每个用户的单个会话 https anupamsaha
  • 如何在应用程序退出前执行代码 flutter

    我想检测用户何时退出我的应用程序并执行一些代码 但我不知道如何执行此操作 我尝试使用这个包 https pub dev packages flutter lifecycle state https pub dev packages flut
  • Mac Catalyst 应用程序:如何在不终止应用程序的情况下关闭窗口?

    我正在使用 Mac Catalyst 开发一个应用程序 当用户关闭 Mac 版本上的窗口时 应用程序将终止 可以通过使用以下方法来改变 Cocoa 中的这种行为 applicationShouldTerminateAfterLastWind
  • 打开一对“int”

    一些背景 我正在解析一个会计分类账 其中有account1 and account2 as int类型 每个都是 0 99999 范围内的数字 我有很多组合需要考虑 理想情况下我想使用类似的东西 switch account1 accoun
  • Rails:验证两列(一起)的唯一性

    我有一个Release模型与medium and country列 等等 不应该有releases共享相同的medium country组合 我该如何将其写为 Rails 验证 您可以使用独特性 http guides rubyonrail
  • if 语句中初始化的变量的范围是什么?

    这可能是一个简单的范围界定问题 Python 文件 模块 中的以下代码让我有点困惑 if name main x 1 print x 在我使用过的其他语言中 这段代码会抛出异常 因为x变量是局部的if语句并且不应该存在于它之外 但是这段代码
  • 仅通过 Express 框架对某些 URL 使用 HTTP 基本身份验证

    我有一个使用 Express 框架设计的 Node js 应用程序http 认证 http http auth info模块 如下 var auth require http auth var express require express
  • WPF DataBinding:取消属性更改 - 组合框未对齐

    我有一个带有组合框和文本框的 WPF 表单 两者都数据绑定到对象的属性 更改组合框或文本框输入会更新对象的属性 并且数据绑定会启动并更新 UI 问题是 我实现了一种取消更改的方法 该方法有效 但搞砸了 UI 更新 如果我从组合框进行更改并取
  • C# 中的 Google 地理编码 Json 解析问题

    我的代码运行良好 但我似乎无法到达树的更深部分 我正在尝试拉动经度和纬度 下面的代码将 status 没有问题拉为 OK 在响应的最后 geometry gt location gt lat 和 lng 的语法是什么 这是我的代码 stri