现在的位置: 首页 > 综合 > 正文

C#通过WebService获取JSON数据并快速解析(百度地图坐标转换API为例)

2018年02月12日 ⁄ 综合 ⁄ 共 1724字 ⁄ 字号 评论关闭

废话:在一个WPF项目中要使用百度地图坐标转换API,百度都说添加Web引用的方式来获取数据,的确是可以,但是要在程序里动态获取就很麻烦,代码又臭又长,

一向比较懒的我非常难以接受,C#这样优美的语言怎能没有好的解决办法呢?于是在坚持查询下,收集各方资料终于找到了我想要的简单的处理方法。

答案,来之不易,特记录一下,希望能为自己和大家使用。

正文:写代码的文采一般都不好,直接上代码吧,如下:

string webServiceUrl="http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924;&from=1&to=5&ak=你的密钥";
//WebRequest在System.Net命名空间里。
WebRequest request = WebRequest.Create(webServiceUrl);
request.Method = "GET";//get,post,put....
request.ContentType = "application/json;charset=utf-8";
int num1=0,num2=0;
Dictionary<int, double> lngDictionary = new Dictionary<int, double>();
Dictionary<int, double> latDictionary = new Dictionary<int, double>();
using (Stream s = request.GetResponse().GetResponseStream())
{
       using (StreamReader sr = new StreamReader(s))
       {
             var jsonData = sr.ReadToEnd();
//JavaScriptSerializer类是微软自己提供的解析JSON的工具类,要引用System.Web.Script.Serialization命名空间,需要添加System.Web.Extensions.dll引用。
JavaScriptSerializer json = new JavaScriptSerializer();
//BaiduCoordsConvertResult是我自定义的类对象,根据json数据的内容去定义的,一会后面贴出 
BaiduCoordsConvertResult resultData = json.Deserialize<BaiduCoordsConvertResult>(jsonData);
             if (resultData.status == 0)
             {
                   foreach (var item in resultData.result)
                   {
                         lngDictionary.Add(num1++, item.x);
                         latDictionary.Add(num2++, item.y);
                   }
              }
              else
              {
                    MessageBox.Show("坐标转换失败,请重新打开文件", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
               }
         }
}

 


下面贴出根据百度地图坐标转换API返回json数据格式定义的BaiduCoordsConvertResult类的定义

public class BaiduCoordsConvertResult
    {
        public int status { get; set; }
        public XYData[] result { get; set; }
    }
    public class XYData
    {
        public double x { get; set; }
        public double y { get; set; }
    }

手工编写,可能有错误,欢迎指正。

抱歉!评论已关闭.