环境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。