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天前
|
JSON 数据可视化 定位技术
python_将包含汉字的字典数据写入json(将datav的全省数据中的贵州区域数据取出来)
python_将包含汉字的字典数据写入json(将datav的全省数据中的贵州区域数据取出来)
6 0
|
14天前
|
存储 JSON JavaScript
「Python系列」Python JSON数据解析
在Python中解析JSON数据通常使用`json`模块。`json`模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。
31 0
|
18天前
|
存储 JSON 数据挖掘
python逐行读取txt文本中的json数据,并进行处理
Python代码示例演示了如何读取txt文件中的JSON数据并处理。首先,逐行打开文件,然后使用`json.loads()`解析每一行。接着,处理JSON数据,如打印特定字段`name`。异常处理包括捕获`JSONDecodeError`和`KeyError`,确保数据有效性和字段完整性。将`data.txt`替换为实际文件路径运行示例。
14 2
|
30天前
|
弹性计算 网络安全 虚拟化
ECS数据问题之升级配置预防数据丢失如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
1月前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
1月前
|
JSON 数据格式
糊涂工具类(hutool)post请求设置body参数为json数据
糊涂工具类(hutool)post请求设置body参数为json数据
61 1
|
1月前
|
JSON 前端开发 数据格式
Ajax传递json数据
Ajax传递json数据
11 0
|
1月前
|
JSON 并行计算 API
使用CJSON/Nlohmann:快速简便地在C/C++中处理JSON数据
使用CJSON/Nlohmann:快速简便地在C/C++中处理JSON数据
148 0
|
1月前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
1月前
|
存储 弹性计算 数据可视化
要将ECS中的文件直接传输到阿里云网盘与相册(
【2月更文挑战第31天】要将ECS中的文件直接传输到阿里云网盘与相册(
420 4