環境Microsoft Visual C# 2010 Beta2
2010 集成Silverlight 3開發環境 .net 4.0
根據TerryLee的一步一步學Silverlight 2系列修改
1、建立一個Silverlight 項目
2、建立項目完成後系統會自動產生一個web項目用以運行Silverlight程序
3、Silverlight是客戶端程序,我們從服務端開始。使用Handler和WebRequest獲取後臺數據
Handler代碼如下 添加新項 -> 選擇 generic handler,生成一個擴展名爲ashx的web文件
打開編輯其代碼,本例代碼如下
DataContractJsonSerializer 對象屬於System.Runtime.Serialization.Json 命名空間.net已經內置Json序列化支持
4、實體類
在這裏需要注意一個問題,我們現在有兩個項目一個web項目它是基於.net4.0,另外一個Silverlight項目。
在2010Beta2,這兩個項目編譯的dll對應的.net版本不同,不可以互相引用。估計即使不是beta版該問題也依然存在。
對於本例來說實體類放在Silverlight項目那web項目也引用不到,只能在兩個項目中把實體類寫兩遍。
5、現在開始寫Silverlight客戶端。2010默認建的程序裏有一個頁面MainPage.xaml,我們可以修改之,或者另外建一個。
在Silverlight項目右鍵菜單,添加新項 -> 選擇 Silverlight User Control,建一個名爲JasonList1.xaml的頁面。
本頁用listbox顯示一個三列的數據列表
獲取數據的代碼如下:
UserControl_Loaded和winform一樣,在空處雙擊一下就自動生成該函數。
可以看到訪問前面寫的Handler通過webRequest獲取數據,並使用了.net內建的System.Runtime.Serialization.Json命名空間下的DataContractJsonSerializer對象。
另外需要注意的是使用了SynchronizationContext對象,位於System.Threading命名空間,這個是解決跨線程訪問UI對象的問題。
對此沒有概念的用戶可能會對使用syn.Post(SetPost, blog) 這種方法綁定感到莫名其妙,爲什麼不直接
Posts.ItemsSource = blog.Posts而要轉去syn.Post(SetPost, blog) 呢。
6、下了一個開源項目Jason.net,不過試用不了還是版本的問題。也就是說Silverlight可能會使用一個.net 2.0的精簡版本吧,反正它和一般的.net程序使用FrameWork就是不能共用。這還是個問題,不過對於序列化功能,.net已經內建Json序列化,Silverlight也同樣,這倒是個好事。所以本例並沒有用到第三方的Jason.net。