一步一步學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的支持。
簡單示例
在本文中我們仍然采用前面兩篇文章中用過的顯示最新隨筆這樣一個示例(舉一反三嘛:)),最終完成的效果如下圖所示:
首先我們建立服務端,以便能夠提供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數據格式化工具http://www.curiousconcept.com/jsonformatter/:
格式化后的數據如下:
現在實現在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或者反序列化為對象實例,你可以從這里下載本文示例代碼。
Worktile,新一代簡單好用、體驗極致的團隊協同、項目管理工具,讓你和你的團隊隨時隨地一起工作。完全免費,現在就去了解一下吧。
https://worktile.com

Silverlight 2 Beta 1版本發布了,無論從Runtime還是Tools都給我們帶來了很多的驚喜,如支持框架語言Visual Basic, Visual C#, IronRuby, Ironpython,對JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步學Silverlight 2系列》文章帶您快速進入Silverlight 2開發。本文將簡單介紹在Silverlight 2中對于JSON的支持。
浙公網安備 33010602011771號