引言

  要使用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字符串之后值。

  接口设计如下:

 namespace ProjectmsMGT_FCL
{
public interface IDFC
{
string Object2Json(List<Object> models); List<Object> Json2Object(string json);
}
}

接口实现

  在项目中,我们会设计很多的Model类,User、Order、Product、Project、Stock等等,那么针对项目的实际需求,我们可以针对不同对象实现接口IDFC。

  如下是两个对象的实现类:

 namespace ProjectmsMGT_FCL
{
public class DFC_Project : IDFC
{
public static JavaScriptSerializer js = new JavaScriptSerializer(); #region IDFC 成员 public string Object2Json(List<Object> models)
{
return js.Serialize(models);
} public List<Object> Json2Object(string json)
{
List<Project> objs = js.Deserialize<List<Project>>(json); List<Object> list = new List<object>();
foreach (var item in objs)
{
list.Add(item);
}
return list;
} #endregion
}
}
 namespace ProjectmsMGT_FCL
{
public class DFC_User : IDFC
{
public static JavaScriptSerializer js = new JavaScriptSerializer(); #region IDFC 成员 public string Object2Json(List<object> models)
{
return js.Serialize(models);
} public List<object> Json2Object(string json)
{
List<User> objs = js.Deserialize<List<User>>(json); List<Object> list = new List<object>();
foreach (var item in objs)
{
list.Add(item);
}
return list;
} #endregion
}
}

总结

  数据转换层的设计相对简单,数据转换层的主要工作是实现Json与数据对象之间的序列化与反序列化。为代理层Proxy提供辅助服务,在调用Web Service代理方法之前,将数据对象参数序列化成Json字符串,在调用之后,将Web Service返回的Json字符串反序列化成数据对象,这整个流程在功能分发层Dispatcher完成。

基于Web Service的客户端框架搭建二:数据转换层(FCL)的更多相关文章

  1. 基于Web Service的客户端框架搭建四:终结篇

    前言 这是这个系列的终结篇,前面3个博客介绍了一下内容: 1.使用Http Post方式调用Web Service 2.客户端框架之数据转换层 3.客户端框架之代理层 框架结构 框架是基于C#的,在V ...

  2. 基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service

    引言 前段时间一直在做一个ERP系统,随着系统功能的完善,客户端(CS模式)变得越来越臃肿.现在想将业务逻辑层以下部分和界面层分离,使用Web Service来做.由于C#中通过直接添加引用的方来调用 ...

  3. 基于Web Service的客户端框架搭建三:代理层(Proxy)

    前言 代理层的主要工作是调用Web Service,将在FCL层序列化好的Json数据字符串Post到Web Service,然后获得Reponse,再从响应流中读取到调用结果Json字符串,在Dis ...

  4. 基于JavaScript的REST客户端框架

    现在REST是一个比较热门的概念,REST已经成为一个在Web上越来越常用的应用,基于REST的Web服务越来越多,包括Twitter在内的微博客都是用REST做为对外的API,先前我曾经介绍过“基于 ...

  5. 《基于 Web Service 的学分制教务管理系统的研究与实现》论文笔记(十一)

    标题:基于 Web Service 的学分制教务管理系统的研究与实现 一.基本内容 时间:2014 来源:苏州大学 关键词:: 教务管理系统 学分制 Web Service 二.研究内容 1.教务管理 ...

  6. 基于Docker的TensorFlow机器学习框架搭建和实例源码解读

    概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...

  7. JAVA开发Web Service几种框架介绍

    郑重声明:此文为转载来的,出处已不知了,侵告删. 在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS( ...

  8. SOAP: java+xfire(web service) + php客户端

    作者: 吴俊杰 web service这项技术暂不说它有多落伍,但是项目中用到了,没法逃避!    xml和json各有各的好处,但是JSON无疑是当今数据交互的主流了.客户soap服务器端用的是 j ...

  9. MyEclipse构建Web Service(Xfire框架)

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 任务要求: 使用Xfire实现一个简单的CalculatorWebServ ...

随机推荐

  1. 浅谈闭包(Closure)

    一.闭包 好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识.今天查看了一下维基百科,顺便写下来. 二.闭包的定义 在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范 ...

  2. cratedb geo 查询

    cratedb支持的geo 查询还相对比较全,开发基本的功能已经够用了 安装cratedb 使用docker docker run -d -p 4200:4200 crate 创建数据库 创建表 CR ...

  3. cratedb 集群 docker-compose 安装试用

    关于集群的配置说明可以参考官方文档,或者es 文档 详细代码参考 https://github.com/rongfengliang/cratedb-cluster-docker 参考配置 docker ...

  4. 安装 Android Studio 2.3 详细过程及错误解决

    因为要开发Android5.0的缘故,抛弃了eclipse转到了Android Studio,第一次使用就是遇到了许多问题,终于是解决问题了,特意写一篇博文给各位要准备从eclipse转到Androi ...

  5. sorting--codility

    lesson 6: sorting 1. Distinct 2. Triangle 2. MaxProductOfThree 4. NumberOfDiscIntersections lesson 6 ...

  6. MoveWindow() SetWindowPos()的区别于联系

    敲代码时,突然发现有一个背景图片无法显示,百思不得其解,最终发现是MoveWindow() SetWindowPos()这两个函数的使用不当造成的. 这里把这两个函数的前世今生给分析一下. 先看Mov ...

  7. WinForm中Application.Idle事件用法

    Application.Idle 事件 描述:当应用程序完成处理并即将进入空闲状态时发生.如果您有必须执行的任务在线程变为空闲之前,请将它们附加到此事件. public partial class F ...

  8. sqlnet.ora限制客户端IP访问

    实现功能: 只允许某几个IP访问数据库服务端(白名单): $ORACLE_HOME/network/admin/sqlnet.ora 添加2个主要参数 TCP.VALIDNODE_CHECKING=y ...

  9. javascript中数组的强大用法·

    1 归并 var a = [{name: 'tom'},{name: 'aiscy'},{name: 'judy'},{name: 'mike'}];a.reduce(function(prev, i ...

  10. Spring batch学习 详细配置解读(3)

    第一篇讲到普通job 配置 那么spring  batch 给我们提供了丰富的配置,包括定时任务,校验,复合监听器,父类,重启机制等. 下面看一个动态设置读取文件的配置 1.动态文件读取 <?x ...