大佬教程收集整理的这篇文章主要介绍了38.Silverlight读取服务器端格式化的Json数据,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Json数据是一种轻量级的数据交换格式,它的传输效率比XML更高,在Silverlight的应用起来可以让Silverlight获取数据速度增 快,减少传输的字符数量。在本节将用一个实例来讲解如何将一个类序列化为Json数据并且传输到Silverlight端。
实现原理:在服务器端新建一个一般处理程序页面“GetJson.ashx”,使用DataContractJsonserializer类的 WriteObject()函数来将类序列化为Json数据集合,然后再Silverlight端通过 DataContractJsonserializer类的ReadObject()函数来将Json数据还原为类。当然在Silverlight端我们 使用Webrequest来下载数据。
首先我们新建一个新的Silverlight应用程序,然后再服务器端和Silverlight端同时添加两个类City.cs(有数个属性)和Citys.cs(有一个属性为City类的List集合)。
- public class City
- {
- private String _CityName;
- private String _CityNum;
- private String _Provence;
- public String Provence
- {
- get { return _Provence; }
- set { _Provence = value; }
- }
- public String CityNum
- {
- get { return _CityNum; }
- set { _CityNum = value; }
- }
- public String CityName
- {
- get { return _CityName; }
- set { _CityName = value; }
- }
- }
- public class Citys
- {
- private List<City> _CityList;
- public List<City> CityList
- {
- get { return _CityList; }
- set { _CityList = value; }
- }
- }
然后我们在服务器端新建一个一般处理程序页面“GetJson.ashx”,然后添加以下代码以实例化多个城市对象,然后转回为Json数据。注意在这里我们需要单独引入System.Runtime.serialization.dll;
- /// <sumMary>
- /// GetJson 的摘要说明
- /// </sumMary>
- public class GetJson : IhttpHandler
- {
- public void Processrequest(httpContext context)
- {
- //步骤一
- //将类Citys格式化为Json字符串
- String JsonString = ToJsonString(GetCitys());
- context.Response.ContentType = "text/plain";
- context.Response.Write(JsonString);
- }
- private Citys GetCitys()
- {
- //实例化字符数据组
- Citys citys = new Citys();
- citys.CityList = new List<City>() {
- new City(){ CityName="成都", CityNum="028", Provence="四川"},
- new City(){ CityName="昆明", Provence="云南"},
- new City(){ CityName="广州", Provence="广东"},
- new City(){ CityName="上海", Provence="上海"},
- new City(){ CityName="重庆", Provence="重庆"}
- };
- return citys;
- }
- // 将一个Object类序列化为Json字符串
- public String ToJsonString(object ToJsonObject)
- {
- using (MemoryStream ms = new MemoryStream())
- {
- DataContractJsonserializer serializer =
- new DataContractJsonserializer(ToJsonObject.GetType());
- serializer.WriteObject(ms, ToJsonObject);
- StringBuilder sb = new StringBuilder();
- sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
- return sb.ToString();
- }
- }
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
运行GetJson.ashx页面我们可以得到类格式化为Json之后的字符如下:
在Silverlight端首先需要引入System.serviceModel.Web.dll和System.Runtime.serialization.dll,然后再敲入下面代码以调用一般应用程序页面得到的字符串,并且反序列化为类。
- public MainPage()
- {
- InitializeComponent();
- //步骤二
- //调用http://localhost:2598/GetJson.ashx获取到Json数据流
- Uri endpoint = new Uri("http://localhost:2598/GetJson.ashx");
- Webrequest request = Webrequest.Create(endpoint);
- request.Method = "POST";
- request.ContentType = "application/x-www-form-urlencoded";
- request.beginGetResponse(new AsyncCallBACk(ResponseReady), request);
- }
- void responseReady(IAsyncResult asyncResult)
- {
- Webrequest request = asyncResult.AsyncState as Webrequest;
- WebResponse response = request.EndGetResponse(asyncResult);
- //步骤三
- //调用UI线程更新DataGrid
- this.dataGrid1.Dispatcher.beginInvoke(()=>{
- this.dataGrid1.Itemssource =
- (Deserialize<Citys>(response.GetResponseStream()) as Citys).CityList;
- });
- }
- // 将Json字符流反序列化为对象
- public static T Deserialize<T>(Stream stream)
- {
- DataContractJsonserializer serializer = new DataContractJsonserializer(typeof(T));
- return (T)serializer.ReadObject(stream);
- }
本实例采用VS2010+Silverlight 4.0,如需源码请点击 SLLinkJson.rar 下载。
以上是大佬教程为你收集整理的38.Silverlight读取服务器端格式化的Json数据全部内容,希望文章能够帮你解决38.Silverlight读取服务器端格式化的Json数据所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。