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

 


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

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

 


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

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

 


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

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

 


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

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



本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/822727

相关文章
|
1月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
48 3
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
27天前
|
存储 运维 算法
服务器数据恢复—raid6阵列硬盘重组raid5阵列如何恢复raid6阵列数据?
服务器存储数据恢复环境: 存储中有一组由12块硬盘组建的RAID6阵列,上层linux操作系统+EXT3文件系统,该存储划分3个LUN。 服务器存储故障&分析: 存储中RAID6阵列不可用。为了抢救数据,运维人员使用原始RAID中的部分硬盘重新组建RAID并进行了初始化。 初始化开始一段时间后,运维人员察觉到情况有异后强制终止初始化,这个时候初始化已经完成一半以上。数据部分已被不可逆的破坏。
|
2月前
|
存储 数据挖掘
服务器数据恢复—用RAID5阵列中部分盘重建RAID5如何恢复原raid5阵列数据?
服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障,用户方请人维修。维修人员在没有了解故障磁盘阵列环境的情况下,用另外4块硬盘(除去掉线的硬盘)重新创建了一组全新的RAID5阵列并完成数据同步,导致原raid5阵列数据全部丢失。
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
178 0
在Java中处理JSON数据:Jackson与Gson库比较
|
1月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
51 1
|
2月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!

热门文章

最新文章