silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了38.Silverlight读取服务器端格式化的Json数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

        Json数据是一种轻量级的数据交换格式,它的传输效率比XML更高,在Silverlight的应用起来可以让Silverlight获取数据速度增 快,减少传输的字符数量。在本节将用一个实例来讲解如何将一个类序列化为Json数据并且传输到Silverlight端。         实现原理:在服务器端新建一个一般处理程序页面“GetJson.ashx”,使用DataContractJs

        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集合)。

 

 
 
  1. public class City 
  2. { 
  3. private String _CityName; 
  4. private String _CityNum; 
  5. private String _Provence; 
  6.  
  7. public String Provence 
  8. { 
  9. get { return _Provence; } 
  10. set { _Provence = value; } 
  11. public String CityNum 
  12. { 
  13. get { return _CityNum; } 
  14. set { _CityNum = value; } 
  15. public String CityName 
  16. { 
  17. get { return _CityName; } 
  18. set { _CityName = value; } 
  19. public class Citys 
  20. { 
  21. private List<City> _CityList; 
  22.  
  23. public List<City> CityList 
  24. { 
  25. get { return _CityList; } 
  26. set { _CityList = value; } 

        然后我们在服务器端新建一个一般处理程序页面“GetJson.ashx”,然后添加以下代码以实例化多个城市对象,然后转回为Json数据。注意在这里我们需要单独引入System.Runtime.serialization.dll;

 

 
 
  1. /// <sumMary
  2. /// GetJson 的摘要说明 
  3. /// </sumMary
  4. public class GetJson : IhttpHandler 
  5. { 
  6.  
  7. public void Processrequest(httpContext context) 
  8. { 
  9. //步骤一 
  10. //将类Citys格式化为Json字符串 
  11. String JsonString = ToJsonString(GetCitys()); 
  12. context.Response.ContentType = "text/plain"
  13. context.Response.Write(JsonString); 
  14.  
  15. private Citys GetCitys() 
  16. { 
  17. //实例化字符数据组 
  18. Citys citys = new Citys(); 
  19. citys.CityList = new List<City>() { 
  20. new City(){ CityName="成都", CityNum="028", Provence="四川"}, 
  21. new City(){ CityName="昆明", Provence="云南"}, 
  22. new City(){ CityName="广州", Provence="广东"}, 
  23. new City(){ CityName="上海", Provence="上海"}, 
  24. new City(){ CityName="重庆", Provence="重庆"
  25. }; 
  26. return citys; 
  27. // 将一个Object类序列化为Json字符串 
  28. public String ToJsonString(object ToJsonObject) 
  29. { 
  30. using (MemoryStream ms = new MemoryStream()) 
  31. { 
  32. DataContractJsonserializer serializer = 
  33. new DataContractJsonserializer(ToJsonObject.GetType()); 
  34. serializer.WriteObject(ms, ToJsonObject); 
  35. StringBuilder sb = new StringBuilder(); 
  36. sb.Append(Encoding.UTF8.GetString(ms.ToArray())); 
  37. return sb.ToString(); 
  38. public bool IsReusable 
  39. { 
  40. get 
  41. { 
  42. return false

        运行GetJson.ashx页面我们可以得到类格式化为Json之后的字符如下:

 

 
 
  1. {"CityList":[{"CityName":"成都","CityNum":"028","Provence":"四川"}, 
  2. {"CityName":"昆明","Provence":"云南"}, 
  3. {"CityName":"广州","Provence":"广东"}, 
  4. {"CityName":"上海","Provence":"上海"}, 
  5. {"CityName":"重庆","Provence":"重庆"}]} 

        在Silverlight端首先需要引入System.serviceModel.Web.dll和System.Runtime.serialization.dll,然后再敲入下面代码调用一般应用程序页面得到的字符串,并且反序列化为类。

 

 
 
  1. public MainPage() 
  2. { 
  3. InitializeComponent(); 
  4. //步骤二 
  5. //调用http://localhost:2598/GetJson.ashx获取到Json数据流 
  6. Uri endpoint = new Uri("http://localhost:2598/GetJson.ashx"); 
  7. Webrequest request = Webrequest.Create(endpoint)
  8. request.Method = "POST"
  9. request.ContentType = "application/x-www-form-urlencoded"
  10. request.beginGetResponse(new AsyncCallBACk(ResponseReady), request); 
  11.  
  12. void responseReady(IAsyncResult asyncResult) 
  13. { 
  14. Webrequest request = asyncResult.AsyncState as Webrequest; 
  15. WebResponse response = request.EndGetResponse(asyncResult); 
  16. //步骤三 
  17. //调用UI线程更新DataGrid 
  18. this.dataGrid1.Dispatcher.beginInvoke(()=>{ 
  19. this.dataGrid1.Itemssource = 
  20. (Deserialize<Citys>(response.GetResponseStream()) as Citys).CityList; 
  21. }); 
  22. // 将Json字符流反序列化为对象 
  23. public static T Deserialize<T>(Stream stream) 
  24. { 
  25. DataContractJsonserializer serializer = new DataContractJsonserializer(typeof(T)); 
  26. return (T)serializer.ReadObject(stream); 

       本实例采用VS2010+Silverlight 4.0,如需源码请点击 SLLinkJson.rar 下载。

38.Silverlight读取服务器端格式化的Json数据

大佬总结

以上是大佬教程为你收集整理的38.Silverlight读取服务器端格式化的Json数据全部内容,希望文章能够帮你解决38.Silverlight读取服务器端格式化的Json数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。