基於Web Service的客戶端框架搭建二:數據轉換層(FCL)


 

引言

  要使用WebService來分離客戶端與服務端,必定要使用約定好兩者之間的數據契約。Json數據以其完全獨立於語言的優勢,成為開發者的首選。C# JavaScriptSerializer為Json與Object對象之間的序列化與反序列化提供了良好的方法。

 

接口設計

  數據轉換包含Json反序列化成Object對象和Object序列化成Json數據。在項目中,會有很多實例對象,都需要使用Serialize和Deserialize方法來實現數據轉換,我們可以抽象出一個接口IDFC(數據格式轉換接口)。因為我們不確定每次從服務端獲取的數據對象是單個Object還是List<Object>,因此約定WebService返回的Json字符串中被序列化的對象是List<Object>,客戶端Post到WebService的參數也是將List<Object>序列化成Json字符串之后值。

  接口設計如下:

1 namespace ProjectmsMGT_FCL
2 {
3     public interface IDFC
4     {
5         string Object2Json(List<Object> models);
6 
7         List<Object> Json2Object(string json);
8     }
9 }

 

接口實現

  在項目中,我們會設計很多的Model類,User、Order、Product、Project、Stock等等,那么針對項目的實際需求,我們可以針對不同對象實現接口IDFC。

  如下是兩個對象的實現類:

 1 namespace ProjectmsMGT_FCL
 2 {
 3     public class DFC_Project : IDFC
 4     {
 5         public static JavaScriptSerializer js = new JavaScriptSerializer();
 6 
 7         #region IDFC 成員
 8 
 9         public string Object2Json(List<Object> models)
10         {
11             return js.Serialize(models);
12         }
13 
14         public List<Object> Json2Object(string json)
15         {
16             List<Project> objs = js.Deserialize<List<Project>>(json);
17 
18             List<Object> list = new List<object>();
19             foreach (var item in objs)
20             {
21                 list.Add(item);
22             }
23             return list;
24         }
25 
26         #endregion
27     }
28 }
 1 namespace ProjectmsMGT_FCL
 2 {
 3     public class DFC_User : IDFC
 4     {
 5         public static JavaScriptSerializer js = new JavaScriptSerializer();
 6 
 7         #region IDFC 成員
 8 
 9         public string Object2Json(List<object> models)
10         {
11             return js.Serialize(models);
12         }
13 
14         public List<object> Json2Object(string json)
15         {
16             List<User> objs = js.Deserialize<List<User>>(json);
17 
18             List<Object> list = new List<object>();
19             foreach (var item in objs)
20             {
21                 list.Add(item);
22             }
23             return list;
24         }
25 
26         #endregion
27     }
28 }

 

總結

  數據轉換層的設計相對簡單,數據轉換層的主要工作是實現Json與數據對象之間的序列化與反序列化。為代理層Proxy提供輔助服務,在調用Web Service代理方法之前,將數據對象參數序列化成Json字符串,在調用之后,將Web Service返回的Json字符串反序列化成數據對象,這整個流程在功能分發層Dispatcher完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM