概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章带您快速进入Silverlight 2开发。
本文将简单介绍在Silverlight 2中对于JSON的支持。

简单示例

在本文中我们仍然采用前面两篇文章中用过的显示最新随笔这样一个示例(举一反三嘛:)),最终完成的效果如下图所示:
 
首先我们建立服务端,以便能够提供JSON格式的数据。在这里为了产生JSON格式的数据,我们借助于一个开源项目Json.NET。建立两个实体类型:
public class Post
{public int Id { get; set; }public string Title { get; set; }public string Author { get; set; }
}
public class Blog
{public List<Post> Posts { get; set; }
}
在Silverlight项目中我们也会使用到这两个实体类,新建一个HttpHandler,产生JSON格式数据,我们使用Json.NET中的JavaScriptConvert.SerializeObject方法即可序列化一个对象为JSON格式:
public class BlogHandler : IHttpHandler
{public void ProcessRequest(HttpContext context){context.Response.ContentType = "text/plain";List<Post> posts = new List<Post>(){new Post{ Id=1, Title="一步一步学Silverlight 2系列(13):数据与通信之WebRequest", Author="TerryLee" },new Post{ Id=2, Title="一步一步学Silverlight 2系列(12):数据与通信之WebClient", Author="TerryLee" },new Post{ Id=3, Title="一步一步学Silverlight 2系列(11):数据绑定", Author="TerryLee" },new Post{ Id=4, Title="一步一步学Silverlight 2系列(10):使用用户控件", Author="TerryLee" },new Post{ Id=5, Title="一步一步学Silverlight 2系列(9):使用控件模板", Author="TerryLee" },new Post{ Id=6, Title="一步一步学Silverlight 2系列(8):使用样式封装控件观感", Author="TerryLee" }};Blog blog = new Blog();blog.Posts = posts;context.Response.Write(JavaScriptConvert.SerializeObject(blog));}public bool IsReusable{get{return false;}}
}
现在测试一下HttpHandler,查看一下生成的数据格式:
 
对这些数据格式化一下,看起来更明显,这里推荐一个在线JSON数据格式化工具[url]http://www.curiousconcept.com/jsonformatter/[/url]:
 
格式化后的数据如下:
 
现在实现在Silverlight中获取JSON数据,并进行反序列化,界面布局XAML就不再贴出来了,跟前面两篇的示例一样。在Silverlight 2中,内置了对于JSON的支持,通过命名空间System.Runtime.Serialization.Json提供,位于System.ServiceModel.Web.dll中。
我们使用WebRequest获取数据:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{Uri endpoint = new Uri("http://localhost:8081/BlogHandler.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);using (Stream responseStream = response.GetResponseStream()){DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Blog));Blog blog = jsonSerializer.ReadObject(responseStream) as Blog;Posts.ItemsSource = blog.Posts;}
}
DataContractJsonSerializer用于将对象序列化为JSON或者反序列化为对象实例,分别使用方法WriteObject和ReadObject。
 
至此一个完整的在Silverlight 2对于JSON的支持示例就完成了。运行后的效果与前面的示例一样:
 

结束语

本文简单介绍了在Silverlight 2中对于JSON的支持,DataContractJsonSerializer用于将对象序列化为JSON或者反序列化为对象实例,你可以从这里下载本文示例代码。

本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/67254

本文出自 51CTO.COM技术博客

转载于:https://www.cnblogs.com/GT_Andy/archive/2009/07/28/1922021.html

(16):Silverlight 2 数据与通信之JSON相关推荐

  1. vs2010 学习Silverlight学习笔记(15):数据与通信之JSON

    概述: 有段时间没学习了,该继续了.不一定写完就发,有可能最后一起发.这个JSON我以前不太了解,只知道是web传输中的一种格式.今天初步了解一下这篇关于JSON是干什么的,写完后再看看W3C中JSO ...

  2. 一步一步学Silverlight 2系列(13):数据与通信之WebRequest

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient

    概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...

  4. java串口发送16进制数据_MFC串口通信发送16进制数据的方法

    本文实例为大家分享了MFC串口通信发送16进制数据的具体代码,供大家参考,具体内容如下 MFC串口通信会使用m_mscomm控件. 发送数据一般是在edit control 里输入自己想发送的内容,然 ...

  5. CLion C++开发QT ,串口通信,JSON文件写入读取,CRC-16校验,图片转二进制(qrc转rcc)并将项目打包exe可执行文件。

    前言: QT自带的编译器非常不好用.今天给大家介绍一款很方便强大的QT开发工具CLion. QT的下载配置安装,网上很多教程,就不介绍了. QT 串口通信,接收下位机消息,发送消息给下位机. QT J ...

  6. php如何返回数据请求数据格式化,PHP以json或xml数据格式返回请求数据的封装代码...

    现在主流的数据格式无非就是json和xml,下面我们来看看如何用php来封装一个返回这两种格式数据的类,下面青岛星网跟大家一起分享. 1.以json格式返回数据 json格式返回数据比较简单,直接将我 ...

  7. php组装json数据包,php封装json通信接口详解及实例

    php创建JSON数据详解: //创建一个字符数组 $arr=array( 'id'=>1, 'name'=>'david' ); echo json_encode($arr);//这个是 ...

  8. Go语言编程笔记16:存储数据

    Go语言编程笔记16:存储数据 图源:wallpapercave.com 几乎任何程序都绕不开读写数据,只不过具体的数据存储介质和方式有所不同.本篇文章将从多种数据存储方式进行探讨各种存储方式如何实现 ...

  9. scrapy 保存mysql_scrapy爬虫事件以及数据保存为txt,json,mysql

    今天要爬取的网页是虎嗅网 我们将完成如下几个步骤: 创建一个新的Scrapy工程 定义你所需要要抽取的Item对象 编写一个spider来爬取某个网站并提取出所有的Item对象 编写一个Item Pi ...

最新文章

  1. ev3pid巡线_PID算法巡线
  2. java uv实例_Java注解的实际应用案例讲解
  3. putty/xshell/Secure CRT远程工具详解
  4. Unix编程艺术心得
  5. electron android编译,Tiny4412_Android编译步骤
  6. 停车场管理系统c语言程序,c语言程序设计 停车场管理系统 停车场有1-20个车位号,设计一个停车场管理系统,实现停车场管理...
  7. python程序设计实践教程陈东_Python
  8. PyTips 0x03 - Python 列表推导
  9. 举例 微积分 拉格朗日方程_Euler-Lagrange Equation (欧拉-拉格朗日方程)推导
  10. 人之间的尊重是相互的_人与人之间,尊重很重要
  11. 企业生产一线管理应找怎样的好帮手?
  12. mui ajax的值php怎样获取,MUI.ajax是怎么获取数据的
  13. SAP针对中国市场推出双轨制医疗计划
  14. IIS建立FTP站点
  15. 汇编语言期末复习总结
  16. Nvidia xavier NX通过flash.sh烧录linux系统
  17. python自动生成ppt_用Python自动化生成倒计时图片
  18. Go:内核线程、LWP、用户线程? 还是协程?
  19. 核心函数--少儿编程
  20. 《深入分布式缓存》之 “缓存为王”

热门文章

  1. A Walk Through the Forest dijkstra(邻接矩阵)
  2. 蓝桥杯scratch_又是福州第一!信息学编程竞赛“蓝桥杯”公布福建省赛榜单
  3. (6)SMC接口采集数据出现错误(学无止境)
  4. (70)FPGA面试题-使用不同的代码实现2:1 MUX ?使用case语句
  5. (61)UART外设驱动接收驱动(六)(第13天)
  6. (80)FPGA复位激励(function)
  7. FPGA复位方法总结
  8. 5 呼吸灯verilog与Systemverilog编码
  9. 蓝桥杯小朋友排队java_1215. 小朋友排队
  10. 子类怎么继承父类方法中的变量_关于继承的那些事!