Silverlight实用窍门系列: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="昆明", CityNum="028", Provence="云南"},
 new City(){ CityName="广州", CityNum="028", Provence="广东"},
 new City(){ CityName="上海", CityNum="028", Provence="上海"},
 new City(){ CityName="重庆", CityNum="028", 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之后的字符如下:
{"CityList":[{"CityName":"成都","CityNum":"028","Provence":"四川"},
{"CityName":"昆明","CityNum":"028","Provence":"云南"},
{"CityName":"广州","CityNum":"028","Provence":"广东"},
{"CityName":"上海","CityNum":"028","Provence":"上海"},
{"CityName":"重庆","CityNum":"028","Provence":"重庆"}]}

在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 下载。

相关文章
|
JSON 小程序 前端开发
小程序模拟请求服务器json数据
小程序模拟请求服务器json数据
474 0
|
JSON 数据处理 数据安全/隐私保护
Ktor库的高级用法:代理服务器与JSON处理
Ktor库的高级用法:代理服务器与JSON处理
|
10月前
|
JSON JavaScript 前端开发
怎么安装JSON服务器?JSON服务器最新安装教程
JSON Server是一款轻量级工具,基于Node.js运行,可通过单个JSON文件快速模拟RESTful API,适用于开发与测试场景。其支持CRUD操作、自定义路由及高级功能如排序、搜索、分页等,同时允许通过中间件扩展功能。为确保安全性,建议在受控环境中使用,并避免处理敏感数据。此外,还有Mirage JS、Mockoon、WireMock和Postman等替代方案,可根据项目需求选择合适的工具。
358 0
|
JSON API 数据格式
基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架
【8月更文挑战第25天】这段资料介绍了一个使用Python从服务器获取实时天气数据并解析JSON格式数据的基本框架。主要分为三个部分:一是安装必要的`requests`库以发起HTTP请求获取数据,同时利用Python内置的`json`库处理JSON数据;二是提供了具体的代码实现,包括获取天气数据的`get_weather_data`函数和解析数据的`parse_weather_data`函数;三是对代码逻辑进行了详细说明,包括如何通过API获取数据以及如何解析这些数据来获取温度和天气描述等信息。用户需要根据实际使用的天气API调整代码中的API地址、参数和字段名称。
389 0
|
XML JSON Apache
【Android】如何获得Apache服务器的JSON文件数据
【Android】如何获得Apache服务器的JSON文件数据
336 0
|
XML JSON 前端开发
Qt+QtWebApp开发笔记(五):http服务器html中使用json触发ajax与后台交互实现数据更新传递
前面完成了页面的跳转、登录,很多时候不刷新页面就想刷新局部数据,此时ajax就是此种技术,且是异步的。   本篇实现网页内部使用js调用ajax实现异步交互数据。   在js中使用 ajax是通过XMLHttpRequest来实现的。
|
JSON 小程序 数据格式
零基础学小程序003----请求服务器数据,请求后台json数据
零基础学小程序003----请求服务器数据,请求后台json数据
445 0
|
JSON 数据格式 C++
全网首发:C++中通过POST向服务器发送JSON的代码
全网首发:C++中通过POST向服务器发送JSON的代码
477 0
|
JSON NoSQL MongoDB
分布式服务器框架之Servers.Core库中实现MongoDB的ObjectId和Json转换
分布式服务器框架之Servers.Core库中实现MongoDB的ObjectId和Json转换
|
数据库
Django搭建服务器,并将数据库中的数据解析为json格式显示在web
Django搭建服务器,并将数据库中的数据解析为json格式显示在web前言编译器 pycharm,环境python3.7、django为最新版本;下载安装python、django(个人认为在cmd用pip下载最好,因人而异,这个下载安装模块比较简单,网上教程很多可以自己来。
1797 0