天地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示:

http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市"}&tk=您的tk密钥

返回结果实例:

{
"msg":"ok",
"location":
{
"level":"地名地址",
"lon":116.40100299989,
"lat":39.90311700025,
"keyWord":"北京市"
},
"searchVersion":"6.0.0",
"status":"0"
}

本文简要介绍如何在C#中通过使用Newtonsoft.Json库来解析Json格式的数据。

1、创建主应用程序(控制台或Winform程序均可);

2、引入Newtonsoft.Json.dll。

3、在工程中创建如下的类,添加using Newtonsoft.Json;名称空间的引用:

using System;
using System.Collections.Generic;
using System.Text; using Newtonsoft.Json; namespace WorldWind
{
public class LocationTDT
{
[JsonProperty("level")]
public string Level { get; set; } [JsonProperty("lon")]
public double Lon { get; set; } [JsonProperty("lat")]
public double Lat { get; set; } [JsonProperty("keyWord")]
public string KeyWord { get; set; }
} class RecordResultTDT
{
[JsonProperty("msg")]
public string Msg { get; set; } [JsonProperty("location")]
public LocationTDT Location { get; set; } [JsonProperty("searchVersion")]
public string SearchVersion { get; set; } [JsonProperty("status")]
public int Status { get; set; }
}
}

4、构建URL服务连接,发起Http请求,获取响应数据流中的内容,调用JsonConvert.DeserializeObject()方法将字符串反序列化为对象即可,调用的cs文件中需要添加using Newtonsoft.Json;名称空间的引用:

            stringm_CurrentSearchUri="http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市"}&tk=您的tk密钥";
            // 发送要求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_CurrentSearchUri);
//下面的代码一定要加上,在天地图网站会发生"远程服务器返回错误: (403) 已禁止。"
request.Method = "GET";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
request.UserAgent = "Mozilla/5.0 (Windows NT 5.2; rv:12.0) Gecko/20100101 Firefox/12.0"; // 取得响应
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
//得到一个json字符串
string joResultTemp = sr.ReadToEnd().ToString();
//将返回的json数据转为JSON对象
RecordResultTDT joResult = JsonConvert.DeserializeObject<RecordResultTDT>(joResultTemp);//返回天地图的Json对象

5、另外,天地图的请求URL在浏览器直接输入时会返回正确的Json结果,但是在C#应用程序中当HttpWebRequest 的属性设置不完全时服务器返回“远程服务器返回错误: (403) 已禁止”

  解决方法:

  如上面的步骤4中提到的,HttpWebRequest 的Method、Accept、Headers、UserAgent等属性(UserAgent非常重要,否则服务器认为是非法请求)一定要设置完整。在访问百度地图的地理编码(GeoCoder)服务接口时不设置上述参数也能够正常访问。

 

在C#中通过使用Newtonsoft.Json库来解析天地图地理编码(GeoCoder)服务接口返回的Json格式的数据,以及HttpWebRequest 设置不完全时服务器返回“远程服务器返回错误: (403) 已禁止”解决方法的更多相关文章

  1. C#爬网页时“远程服务器返回错误: (403) 已禁止”解决方法

    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri); //这个一定要加上,在某些网站没有会发生"远程服务器返回错误: ...

  2. 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据

    百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路 ...

  3. Nginx常见错误与问题之解决方法技术指南

      Nginx常见错误与问题之解决方法技术指南. 安装环境: 系统环境:redhat enterprise 6.5 64bit 1.Nginx 常见启动错误 有的时候初次安装nginx的时候会报这样的 ...

  4. 004_Nginx 499错误的原因及解决方法

    一. 今天进行系统维护,发现了大量的499错误, 499错误 ngx_string(ngx_http_error_495_page), /* 495, https certificate error ...

  5. 出现 java.lang.OutOfMemoryError: PermGen space 错误的原因及解决方法

    一.原因及解决方法[1] 1.原因:堆内存的永久保存去区内存分配不足(缺省默认为64M),导致内存溢出错误. 2.解决方法:重新分配内存大小,-Xms1024M -Xmx2048M -XX:PermS ...

  6. 电脑出现kernelbase.dll错误的两种解决方法

    KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...

  7. Nginx 499错误的原因及解决方法

    今天进行系统维护,发现了大量的499错误, 499错误 ngx_string(ngx_http_error_495_page), /* 495, https certificate error */n ...

  8. SQL Server 2008 用户SA登录失败(错误18456)之图文解决方法

    SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法 出现问题 : 标题: 连接到服务器 ------------------------------ ...

  9. vi错误terminal too wide解决方法

    vi错误terminal too wide解决方法 http://blog.sina.com.cn/s/blog_3f68daa00100vcsh.html

  10. qt 旧项目编译运行提示 “启动程序失败,路径或者权限错误?” 原因及解决方法

    qt 旧项目编译运行提示 "启动程序失败,路径或者权限错误?" 原因及解决方法 原因 Qt Creator在打开项目文件的同时会生成.pro.user文件,.pro.user文件叫 ...

随机推荐

  1. 云原生爱好者周刊:Lens 5.0 发布,更炫、更快、更强!

    云原生一周动态要闻: Lens 5.0.0 发布 GitHub 推出 AI 编程工具 GitHub Copilot Kubernetes 发布 2020 年社区年度报告 Weaveworks 推出适用 ...

  2. 云原生周刊:K8s 在 v1.27 中移除的特性和主要变更

    文章推荐 K8s 在 v1.27 中移除的特性和主要变更 随着 Kubernetes 发展和成熟,为了此项目的整体健康,某些特性可能会被弃用.移除或替换为优化过的特性.基于目前在 v1.27 发布流程 ...

  3. docker常用命令与应用

    docker入门与docker file介绍 原文地址 docker常用命令 https://blog.csdn.net/leilei1366615/article/details/106267225 ...

  4. python多线程完成模拟支付请求

    import asyncioimport sysfrom queue import Queuesys.path.append("../")from tool.__init__ im ...

  5. uni-app 监听返回按钮

    前置条件: 开发环境:windows 开发框架:uni-app , H5+,nativeJS 编辑器:HbuilderX 2.8.13 4. 兼容版本:安卓,IOS已作测试 进入正题: 文档地址uni ...

  6. 2.11 Linux四种远程管理协议

    提到远程管理,通常指的是远程管理服务器,而非个人计算机.个人计算机可以随时拿来用,服务器通常放置在机房中,用户无法直接接触到服务器硬件,只能采用远程管理的方式. 远程管理,实际上就是计算机(服务器)之 ...

  7. 一文带你搞懂GaussDB数据库性能调优

    本文分享自华为云社区<[GaussTech技术专栏]GaussDB性能调优>,作者:GaussDB 数据库. 数据库性能调优是一项复杂且系统性的工作,需要综合考虑多方面的因素.因此,调优人 ...

  8. 使用Ollama和Open WebUI管理本地开源大模型

    Open WebUI和Ollama介绍 Open WebUI 是一个功能丰富且用户友好的自托管 Web 用户界面(WebUI),它被设计用于与大型语言模型(LLMs)进行交互,特别是那些由 Ollam ...

  9. 国产数据库oceanBbase,达梦,金仓与mysql数据库的性能对比 一、比对方法和结果

    最近调研了三款国产化数据库与mysql做对比,调研主要性能指标是大数据写入速度.大数据读取速度以及是否支持分表. 一.测试结果 测试结果与预期的差别很大     1.先说oceanBase社区版这款数 ...

  10. OpenResty之resty.limit.count 模块介绍

    resty.limit.count 模块介绍: resty.limit.count 模块就是限制接口单位时间的请求数,This module depends on lua-resty-core模块,所 ...