使用Silverlight4与Wcf4的Net.tcp实现的共享白板
这篇文章与“使用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后自己研究吧,有什么不太清楚的地方您可以留言给偶。
一个完整的人生应该是宽恕、容忍、等待和爱!