【李会军】一步一步学Silverlight 2系列(16):数据与通信之JSON
上一篇 / 下一篇 2008-04-11 20:11:03 / 个人分类:经典文章
概述
Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章带您快速进入Silverlight 2开发。
本文将简单介绍在Silverlight 2中对于JSON的支持。
简单示例
在本文中我们仍然采用前面两篇文章中用过的显示最新随笔这样一个示例(举一反三嘛:)),最终完成的效果如下图所示:ITPUB个人空间Gf)~D#H8s-n~Oma
(V-`;z/Xxi0
首先我们建立服务端,以便能够提供JSON格式的数据。在这里为了产生JSON格式的数据,我们借助于一个开源项目Json.NET。建立两个实体类型:
public classPostITPUB个人空间/I:t6{Lv4X&? ^
{
?.h)N8xUO.\+S&^0public intId {get;set; }ITPUB个人空间9RBH `G{
$pj*m;p"|m0public stringTitle {get;set; }ITPUB个人空间KS"u-i9E*A
ITPUB个人空间l2]0Bv tj\d6`#G^?
public stringAuthor {get;set; }ITPUB个人空间!a*oe0k,h3E"[$W%P
}
public classBlog
t R:]T0l#_0{ITPUB个人空间)q1ac;ip2S*Gl@O.w
publicList<Post> Posts {get;set; }
"@9gE0HD0}
在Silverlight项目中我们也会使用到这两个实体类,新建一个HttpHandler,产生JSON格式数据,我们使用Json.NET中的JavaScriptConvert.SerializeObject方法即可序列化一个对象为JSON格式:
public classBlogHandler:IHttpHandler
,|WP3v2\ Jj8?V V0{
.zU kbVM3V,L H0
6h7v6i?*E P!qc0public voidProcessRequest(HttpContextcontext)
?UB~}!Xm0{
\3kVC%t.A,ik0context.Response.ContentType ="text/plain";
/K3rL2O9W%wz0
fyL8{ f| l"X0List<Post> posts =newList<Post>()ITPUB个人空间+Ukt l@j;hS*@ { {){
{ITPUB个人空间~N W.bCl%s$[4cl
newPost{ Id=1, Title="一步一步学Silverlight 2系列(13):数据与通信之WebRequest", Author="TerryLee"},ITPUB个人空间"I h~jJ
newPost{ Id=2, Title="一步一步学Silverlight 2系列(12):数据与通信之WebClient", Author="TerryLee"},
ikau9Cas}&HF/D0newPost{ Id=3, Title="一步一步学Silverlight 2系列(11):数据绑定", Author="TerryLee"},
wQS4F0Tm6f0newPost{ Id=4, Title="一步一步学Silverlight 2系列(10):使用用户控件", Author="TerryLee"},ITPUB个人空间n"[1V@6N9Gq
newPost{ Id=5, Title="一步一步学Silverlight 2系列(9):使用控件模板", Author="TerryLee"},ITPUB个人空间 Pr2Z-L2[Q+i
newPost{ Id=6, Title="一步一步学Silverlight 2系列(8):使用样式封装控件观感", Author="TerryLee"}
[ w:KCc,D1H0};ITPUB个人空间ixzJ+ETsb;@
E H@wm'{j|\i%l0Blogblog =newBlog();
q.M!Mi%C0B)P7mCg0blog.Posts = posts;ITPUB个人空间ite"`o9x,h+b3c
ITPUB个人空间3WM*u^mg!O s
context.Response.Write(JavaScriptConvert.SerializeObject(blog));ITPUB个人空间?'G:~S$oZU:s
}ITPUB个人空间o{Ok1}$~_jN
}Sd P3R3Dl!X0public boolIsReusable
;_ |#v@.u}9T0{
W @.vyB0SY0getITPUB个人空间1wZ?Q5o'g]6\)?
{ITPUB个人空间 yZ"S!A:kf
return false;ITPUB个人空间x8[YxT%qt _
}ITPUB个人空间(d X8Gv4f!FCA
}ITPUB个人空间,E+fwP/z~+kp
}
现在测试一下HttpHandler,查看一下生成的数据格式:

.G"o4DHRK"p;N%Hg0对这些数据格式化一下,看起来更明显,这里推荐一个在线JSON数据格式化工具http://www.curiousconcept.com/jsonformatter/:
GM|0L6J }B;d0

#E%C\$Y$z M0格式化后的数据如下:ITPUB个人空间~Q*C!J)so:h*d8mU
ITPUB个人空间 J"C|I p8W%W6G A7H现在实现在Silverlight中获取JSON数据,并进行反序列化,界面布局XAML就不再贴出来了,跟前面两篇的示例一样。在 Silverlight 2中,内置了对于JSON的支持,通过命名空间System.Runtime.Serialization.Json提供,位于 System.ServiceModel.Web.dll中。
我们使用WebRequest获取数据:
private voidUserControl_Loaded(objectsender,RoutedEventArgse)