一般来说,存取少量数据或是进行少量的数据交互,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;
}