转自:https://www.cnblogs.com/huangxincheng/p/4660251.html

我们都知道wcf是由信道栈组成的,在我们传输的参数走到传输信道层之前,先需要经过序列化的过程,也就是将参数序列化为message,这篇

我们就来说说这里的序列化,蛮有意思的,可能初学者也明白,在wcf中默认的序列化是DataContractSerializer,确实是这样,不过wcf在信道中

其实不仅仅支持DataContractSerializer,它还支持其他类型的序列化,比如XmlSerializer,NetDataContractSerializer以及DataContractJson

Serializer,下面我们一起来见证下。

1. XmlSerializer

要了解XmlSerializer,我们先来简单看看NetDataContractSerializer,在前面的文章中,我也说过DataContract就是将我们的model序列化为

XSD,第二点就是使用DataContract的原则就是你必须在Model上加DataContract,而且在你要序列化的字段上加DataMember。这样才能够正确的序列

化,为了演示,我们先看看默认的序列化Model会变成啥样?

 1     [DataContract]2     public class Student3     {4         [DataMember]5         public int ID { get; set; }6 7         [DataMember]8         public string Name { get; set; }9
10         [DataMember]
11         public string SNS { get; set; }
12     }

但是在有些情况下,你可能并不适合用DataContract,比如Model是第三方提供的,那么这个时候你的Model可能就不会有DataContract标记,那这样的

话wcf就无法进行序列化,那我如果非要保证wcf能正常跑起来的话,还有其他好的办法吗???当然了,肯定有办法,这就好比谈恋爱一样,总不能

在一棵树上吊死吧,没人谁离不开谁,也不会谁离开了谁会死,天涯何处无芳草,男儿何患无妻,对吧。Wcf中也一样,既然DataContract用不了,自

然会有替代它的人,那这个人就是XmlSerializer,使用起来也很简单,就是在契约方法上面加上XmlSerializerFormat即可,然后我们把Model的

DataContract全部去掉。

是不是很简单,下面我们就要验证一下,看看这个Format是否进入到了这个Operation的Behavior中,

从上面的图中,你也看到了, XmlSerializerFormat 已经被注入到Behavior中,并且是由类XmlSerializerOperationBehavior代为处理。

接下来,我们用fiddler监视一下,看看Message中的Body是否真的按照XmlSerializer 序列化了。

有没有看到,这次Message的Body已经和文章开头处的Message不一样了。

2. NetDataContract

这个玩意也没什么好说的,光从表面上看,它和DataContract唯一不同的地方就是多了一个Net,所以你大概也能猜到,这个功能大概和DataCont

ract一样,只不过比DataContract多了一个程序集保存,那这句话是什么意思呢???就是NetDataContract会把程序集的命名空间和类名都保存到XSD中,

在反序列化的过程中必须要用同样的程序集才能解开,其实不管我们是做SOA或者面向对象编程都讲究接口编程,而NetDataContract给你的印象就是面

向对象编程,当然这也有好处,比如说如果把程序集带进去就好像秘钥一样,必须有它才能解开,对吧,所以导致wcf项目组并不对NetDataContract感冒

,所以在实际应用上也不建议使用。

3. DataContractJsonSerializer

看到上面这个带有Json的字样,我想大家都知道这玩意是干什么的???没错,他就是将我们的Model序列化成Json,这在wcf的rest编码使用的很广,

如果大家有兴趣的话,我在下一篇会详细描述,这里我们先简单看一看。

好了,这一篇就说这些了,洗洗睡了。。。

十五天精通WCF——第十二天 说说wcf中的那几种序列化相关推荐

  1. 十五天精通WCF——第六天 你必须要了解的3种通信模式

    十五天精通WCF--第六天 你必须要了解的3种通信模式 原文:十五天精通WCF--第六天 你必须要了解的3种通信模式 wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦 ...

  2. 十五天精通WCF——第七天 Close和Abort到底该怎么用才对得起观众

    原文:十五天精通WCF--第七天 Close和Abort到底该怎么用才对得起观众 一:文起缘由 写这一篇的目的源自于最近看同事在写wcf的时候,用特别感觉繁琐而且云里雾里的嵌套try catch来防止 ...

  3. 十五天精通WCF——第十四天 一起聊聊FaultException

    原文:十五天精通WCF--第十四天 一起聊聊FaultException  我们在玩web编程的时候,可能你会不经意的见到一些http500的错误,我想你应该不会陌生的,原因你应该也知道,服务器异常嘛 ...

  4. 十五天精通WCF——第五天 你需要了解的三个小技巧

    十五天精通WCF--第五天 你需要了解的三个小技巧 原文: 十五天精通WCF--第五天 你需要了解的三个小技巧 一: 服务是端点的集合 当你在开发wcf的时候,你或许已经注意到了一个service可以 ...

  5. 十五天精通WCF——第十一天 如何对wcf进行全程监控

    说点题外话,我们在玩asp.net的时候,都知道有一个叼毛玩意叫做"生命周期",我们可以用httpmodule在先于页面的page_load中 做一些拦截,这样做的好处有很多,比如 ...

  6. 十五天精通WCF——第三天 client如何知道server提供的功能清单

     通常我们去大保健的时候,都会找姑娘问一下这里能提供什么服务,什么价格,这时候可能姑娘会跟你口述一些服务或者提供一份服务清单,这样的话大 家就可以做到童嫂无欺,这样一份活生生的例子,在wcf中同样是一 ...

  7. 十五天精通WCF——第八天 对“绑定”的最后一点理解

    转眼已经中断10几天没有写博客了,也不是工作太忙,正好碰到了端午节,然后最近看天津台的爱情保卫战入迷了...太好看了,一直都是回味无穷...而且 涂磊老师话说的真是tmd的经典,然后就这样耽搁了,好了 ...

  8. 十五天精通WCF——第十三天 用WCF来玩Rest

    在我们玩wcf的时候,都会潜意识的觉得wcf就是通过soap协议交换消息的,并且可以在basic,tcp,msmq等等绑定中任意切换, 牛逼的一塌糊涂,但是呢,如果说哪一天wcf不再使用soap协议, ...

  9. JavaSE(二十五)——String与StringBuffer、StringBuilder的区别、创建对象的几种方法、Http和Https的区别

    文章目录 1. String与StringBuffer.StringBuilder的区别 2. Java创建对象的几种方法 3. Http和Https的区别 1. String与StringBuffe ...

最新文章

  1. 20155308『网络对抗技术』Exp7:网络欺诈防范
  2. 佳能ts3100打印机使用说明书_佳能TS9120打印机完全满足家庭使用—最具性价比打印机...
  3. CAPI3 HTTP文件服务器搭建(共享目录版)
  4. 鸟哥Linux私房菜知识点总结3到5章
  5. 花信年华--You're gonna love who you turn out to be
  6. mysql命令查询语句
  7. 中介者模式(Mediator Pattern)
  8. 计算机安全基础:加密技术知识笔记
  9. js ejs for语句的第二种遍历用法
  10. 100个囚犯和灯泡C语言,关于国王和100个囚犯
  11. SpringBoot两种定时任务(Spring Schedule 与 Quartz 整合 )实现
  12. android4.4.3版本root,碉堡了!ROOT精灵支持Nexus 5等Android4.4.3机型ROOT
  13. K线形态识别—双K线之卖出型双日K线组合
  14. Java Stream流
  15. 路由器、交换机、集线器的区别
  16. 二十五、PHP内核探索:常量的实现 ☞ 脱离C语言和数学讨论底层都是耍流氓
  17. 【微服务】Nacos 注册中心的设计原理
  18. 【3分钟速读】那些你苦苦搜索的模板,是这么被捣腾出来的
  19. node.js egg框架接入微信公总号
  20. 阴暗、恐怖、外星人?这是一款什么样的游戏?

热门文章

  1. 转“时寒冰”文!2015年房价将彻底的崩溃!
  2. 02智慧城市分层架构
  3. r语言安装ipsolve_R语言讲义(包各种回归).ppt
  4. SAP那些事-理论篇-11-SAP核心设计逻辑
  5. 关于23种设计模式的有趣见解
  6. 蝴蝶效应butterfly
  7. 一个电商购物(B2C)网站性能测试需求
  8. 优秀教师学术交流心得体会
  9. 项目有多少个服务器,创业者说:项目需要多少服务器之“用户访问模型”
  10. easyexcel在一个excel中建立多个sheet