zoukankan      html  css  js  c++  java
  • 基于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完成。

  • 相关阅读:
    分享到微信时如何自定义文字描述和图片
    Book Review: PowerShell 3.0 Advanced Administration Handbook
    ListView setOnItemClickListener无效原因分析
    Android 自定义通用的loadingview
    Android Studio快速开发之道
    Android 轻松实现仿淘宝地区选择
    Android自定义View4——统计图View
    Android打造属于自己的数据库操作类。
    一起来学习android自定义控件3——边缘凹凸的View
    使用Intellij IDEA搭建Ext JsMVC web项目
  • 原文地址:https://www.cnblogs.com/caiwenz/p/3911802.html
Copyright © 2011-2022 走看看