日期:2014-05-16 浏览次数:20880 次
一般来说,存取少量数据或是进行少量的数据交互,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; }