.NEt专家博客!
【李会军】一步一步学Silverlight 2系列(16):数据与通信之JSON
概述
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个人空间9S;s@+r~r
g*J0c!pz,s0
首先我们建立服务端,以便能够提供JSON格式的数据。在这里为了产生JSON格式的数据,我们借助于一个开源项目Json.NET。建立两个实体类型:
public classPostITPUB个人空间T7P,Ph2Sg%`w
{
S{.W5cC2zNP0public intId {get;set; }ITPUB个人空间(Tr:s'?0R Qw1O
e7dj.l~+S7@%y0public stringTitle {get;set; }ITPUB个人空间kv"WsD$sh
%F~#RE/^Sj\0public stringAuthor {get;set; }
X0n6q(m*_ K I0}
public classBlog
? of~+I/f7\9kX0{ITPUB个人空间 `'H"m;sH
publicList<Post> Posts {get;set; }ITPUB个人空间"{8m!\4O E+l
}
在Silverlight项目中我们也会使用到这两个实体类,新建一个HttpHandler,产生JSON格式数据,我们使用Json.NET中的JavaScriptConvert.SerializeObject方法即可序列化一个对象为JSON格式:
public classBlogHandler:IHttpHandler
[/K;x*x%]v3[U'S9`V0{
\*egnbD'ygW,W9q0
(K"F:Qe2e#y!B})u"[0public voidProcessRequest(HttpContextcontext)
$k/eExo#f_ae0{ITPUB个人空间y"] }hk*IR)Aif,W
context.Response.ContentType ="text/plain";ITPUB个人空间.uy&Td]rQO
ITPUB个人空间C:J z6i]@D J;?
List<Post> posts =newList<Post>()
v6UB2QS M5?1LM2S/r W0{ITPUB个人空间VT^(|'sF#M??-O
newPost{ Id=1, Title="一步一步学Silverlight 2系列(13):数据与通信之WebRequest", Author="TerryLee"},ITPUB个人空间N j,{}d"L&jx*m
newPost{ Id=2, Title="一步一步学Silverlight 2系列(12):数据与通信之WebClient", Author="TerryLee"},ITPUB个人空间;E:nAD&GB.Y
newPost{ Id=3, Title="一步一步学Silverlight 2系列(11):数据绑定", Author="TerryLee"},ITPUB个人空间%Jwo1l$f/m9@
newPost{ Id=4, Title="一步一步学Silverlight 2系列(10):使用用户控件", Author="TerryLee"},ITPUB个人空间u F1m i%l7F P)vJ!{C
newPost{ Id=5, Title="一步一步学Silverlight 2系列(9):使用控件模板", Author="TerryLee"},
L,C6ywTwam0newPost{ Id=6, Title="一步一步学Silverlight 2系列(8):使用样式封装控件观感", Author="TerryLee"}ITPUB个人空间`?!l*{-T w&I*z
};
D*]Y7p"lc"H4G0ITPUB个人空间;Kul }mw+xB
Blogblog =newBlog();ITPUB个人空间*LIo;q2i
blog.Posts = posts;
f;q W ObW5o/~L _0ITPUB个人空间"Z,_.U @9Tw
context.Response.Write(JavaScriptConvert.SerializeObject(blog));
G8_tvv(OU]4ng0}
(Bs"S0M+o:\#K0
:xi/CuoE[0ct&v x0public boolIsReusableITPUB个人空间VqS%kxM
{ITPUB个人空间f1s }R4FG3Hg K
get
v oD0?qn&D