日期:2014-05-16  浏览次数:20804 次

谈谈ASP.NET的C#如何解析JSON数据

一般来说,存取少量数据或是进行少量的数据交互,XML和JSON的形式最先被想到,上一篇博客中谈的是javascript怎么解析JSON数据。

但当我们在做web form项目的时候,我们要通过其他网站的api接口获取其动态的更新信息,而现在的网站一般通过接口给出的数据不是存储在xml就是在json中,这个情况下可能需要在后台用C#来解析JSON了。


首先,肯定不会像javascript解析json数据那么简单,但也不会很复杂。

一、新建一个网站项目,右击你的项目->选择管理NuGet程序包->选择联机->nuget.org->选择第二个json.NET->右上角有安装按钮,点击安装即可(图中我已经安装过了,所以是打钩的状态)




二、安装完成后,你会在你的项目下面的引用文件夹中找到对应的Newtonsoft.Json类库了。这下其实已经完成了一半了,接下来当然就是代码了。

在后台自然要引入刚刚下载安装的类库了,只要using Newtonsoft.Json。然后在下面写从服务器得到json数据进行转换成C#对象了。

model层代码:

class WeatherInfo
    {
        public WeatherDataSource weatherinfo;
    }

    class WeatherDataSource
    {
        public string city { get; set; }
        public string weather1 { get; set; }
        public string temp1 { get; set; }
    }

    class WeatherDataHelper
    {
        //静态方法属于类
        public async static Task<WeatherInfo> GetWeatherList()
        {
            //从web服务器得到活数据
            //WebRequest req = WebRequest.Create("http://localhost:55008/stuInfo.html");//这个是自己建一个本地服务器测试的
            //WebRequest req = WebRequest.Create("http://localhost:55008/stuInfo.aspx");//这个是自己建一个本地服务器测试的
            WebRequest req = WebRequest.Create("http://m.weather.com.cn/data/101291301.html");//这个是用其他网站测试的
            req.Method = "GET";
            var response = await req.GetResponseAsync();
            var stream = response.GetResponseStream();
            StreamReader sr = new StreamReader(stream);
            var jsonStr = await sr.ReadToEndAsync();

            //把json字符串还原成c#对象
            WeatherInfo weatherJson = await JsonConvert.DeserializeObjectAsync<WeatherInfo>(jsonStr);//反序列化

            return weatherJson;
        }
    }
.cs引用:
public WeatherDemo()
        {
            this.InitializeComponent();
        }

        private void refresh_Click(object sender, RoutedEventArgs e)
        {
            DataBind();
        }
        private async void DataBind()
        {
            var weatherList = await WeatherDataHelper.GetWeatherList();
            txtCity.Text = weatherList.weatherinfo.city;
            txtWeather.Text = weatherList.weatherinfo.weather1;
            txtTemp.Text = weatherList.weatherinfo.temp1;
        }