天地图地理编码(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. 云原生周刊:OpenTofu 宣布正式发布 | 2023.1.15

    开源项目推荐 kubeaudit kubeaudit 是一个开源项目,旨在帮助用户对其 Kubernetes 集群进行常见安全控制的审计.该项目提供了工具和检查规则,可以帮助用户发现潜在的安全漏洞和配 ...

  2. Kubernetes 对接 GlusterFS 磁盘扩容实战

    前言 知识点 定级:入门级 使用 Heketi Topology 扩容磁盘 使用 Heketi CLI 扩容磁盘 实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同) 主机名 IP CP ...

  3. 题解:GZOI2024 D2T2 乒乓球

    考场上切了,但是比较神奇的题,应该是蓝/紫. Discription 乒乓球 \(\text{ }\)时间限制:\(\bold{3}\) 秒 众所周知,一场乒乓球比赛共有两个玩家 \(A\) 和 \( ...

  4. 高效求解 n 个点之间的最大曼哈顿距离

    平面上有 n 个点,如何求出任意两点的曼哈顿距离的最大值? 曼哈顿距离的公式为: \[d((x_1, y_1), (x_2, y_2)) = |x_1 - x_2| + |y_1 - y_2| \] ...

  5. 如何解决MySQL Connector NET xxxx无法卸载的问题(win10)

    使用Power BI(以下简称PBI)的小伙伴想必都知道,想要在PBI连接MySQL数据库,必须安装MySQL connector net,我之前安装过MySQL connector net 6.9. ...

  6. PLSQL安装配置与汉化

    一.下载安装 1.官方安装包下载链接:https://www.allroundautomations.com/plsqldev.html 如下图所示,可自行选择32位或者64位 2.下载后双击安装至指 ...

  7. Socket编程与IO多路复用

    0.引言 本篇博客将从socket模型为起点,引入IO多路复用的学习. 1.Socket模型 1.1.Socket的诞生 Socket的诞生背景: Socket最早出现在20实际80年代的Unix操作 ...

  8. Mybatis【11】-- Mybatis Mapper动态代理怎么写?

    目录 1.回顾Mybatis执行sql的流程 2.mapper动态代理怎么写? 3.mapper动态代理怎么做的? 1.回顾Mybatis执行sql的流程 在之前的代码中我们的运行过程再梳理一下,首先 ...

  9. Helm部署SkyWalking

    一 . 部署ElasticSearch 1.下载安装包 helm repo add elastic https://helm.elastic.cohelm pull elastic/elasticse ...

  10. MySQL底层概述—6.索引原理

    大纲 1.索引原理 2.二叉查找树 3.平衡二叉树(AVL树) 4.红黑树 5.B-Tree 6.B+Tree 7.Hash索引 8.聚簇索引与非聚簇索引 1.索引原理 索引会在数据文件中(ibd文件 ...