这篇文章与“使用Silverlight4与Wcf4的Net.tcp实现的简单聊天室”是一起的,同一个demo只不过我又多加了一个共享白板的功能而已。
共享白板使用的是Json来对控件的属性序列化的,然后通过net.tcp方式传送到服务器,然后服务器使用的“推”的方式把序列化后的属性广播出去。
下图为用户"user-1"使用"笔"进行画图,同时user-2与user-3接收到同样的信息并展示到画图版中。
本示例中我使用的是json来序列化对象的所有属性并进行传输。我把序列化与反序列化的方法都写成了扩展方法。如下:
Json序列化
1
#region
Json序列化
2 public static class JsonSerializerHelper
3 {
4 /// <summary>
5 /// 添加一个扩展方法为字符串
6 /// </summary>
7 /// <typeparam name="T"> 预期的类型 </typeparam>
8 /// <param name="json"> JSON字符串数据 </param>
9 /// <returns> 反序列化的对象图 </returns>
10 public static T JsonDeserialize < T > ( this string json)
11 {
12 using (var mstream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
13 {
14 var serializable = new DataContractJsonSerializer( typeof (T));
15 return (T)serializable.ReadObject(mstream);
16 }
17 }
18
19 /// <summary>
20 /// 序列化对象JSON字符串
21 /// </summary>
22 /// <param name="obj"> 对象序列化 </param>
23 /// <returns> 序列化字符串 </returns>
24 public static string JsonSerialize( this object obj)
25 {
26 using (var mstream = new MemoryStream())
27 {
28 var serializable = new DataContractJsonSerializer(obj.GetType());
29 serializable.WriteObject(mstream, obj);
30 mstream.Position = 0 ;
31 using (var reader = new StreamReader(mstream))
32 {
33 return reader.ReadToEnd();
34 }
35 }
36 }
37 }
38 #endregion
2 public static class JsonSerializerHelper
3 {
4 /// <summary>
5 /// 添加一个扩展方法为字符串
6 /// </summary>
7 /// <typeparam name="T"> 预期的类型 </typeparam>
8 /// <param name="json"> JSON字符串数据 </param>
9 /// <returns> 反序列化的对象图 </returns>
10 public static T JsonDeserialize < T > ( this string json)
11 {
12 using (var mstream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
13 {
14 var serializable = new DataContractJsonSerializer( typeof (T));
15 return (T)serializable.ReadObject(mstream);
16 }
17 }
18
19 /// <summary>
20 /// 序列化对象JSON字符串
21 /// </summary>
22 /// <param name="obj"> 对象序列化 </param>
23 /// <returns> 序列化字符串 </returns>
24 public static string JsonSerialize( this object obj)
25 {
26 using (var mstream = new MemoryStream())
27 {
28 var serializable = new DataContractJsonSerializer(obj.GetType());
29 serializable.WriteObject(mstream, obj);
30 mstream.Position = 0 ;
31 using (var reader = new StreamReader(mstream))
32 {
33 return reader.ReadToEnd();
34 }
35 }
36 }
37 }
38 #endregion
其它的功能就很容易实现了,这里就不做太多的讲解了。请下载demo后自己研究吧,有什么不太清楚的地方您可以留言给偶。