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

  

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

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

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

Serializer,下面咱们一块儿来见证下。rest

 

1. XmlSerializercode

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

XSD,第二点就是使用DataContract的原则就是你必须在Model上加DataContract,并且在你要序列化的字段上加DataMember这样才可以正确的序列对象

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

 1     [DataContract]
 2     public class Student
 3     {
 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能正常跑起来的话,还有其余好的办法吗???固然了,确定有办法,这就比如谈恋爱同样,总不能get

在一棵树上吊死吧,没人谁离不开谁,也不会谁离开了谁会死,天涯何处无芳草,男儿何患无妻,对吧。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,这在wcfrest编码使用的很广,

若是你们有兴趣的话,我在下一篇会详细描述,这里咱们先简单看一看。

 

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

相关文章
相关标签/搜索