快速掌握WCF序列化
近期看了大量關(guān)于WCF的資料,深入的了解了關(guān)于WCF的原理機(jī)制,我們都知道,WCF內(nèi)置了兩種序列化方式,DataContractSerializer和NetDataContractSerializer?,F(xiàn)在就和大家簡單的分析介紹一下WCF序列化方面的知識(shí)吧。
先來看看WCF序列化的聲明:
- public sealed class DataContractSerializer : XmlObjectSerializer
- {
- public DataContractSerializer(Type type);
- …
- public override object ReadObject(XmlReader reader);
- public object ReadObject(Stream stream);
- public void WriteObject(Stream stream, object graph);
- public override void WriteObject(XmlWriter writer, object graph);
- …
- }
- public sealed class NetDataContractSerializer : XmlObjectSerializer, IFormatter
- {
- public NetDataContractSerializer();
- …
- public object Deserialize(Stream stream);
- public void Serialize(Stream stream, object graph);
- public override object ReadObject(XmlReader reader);
- public object ReadObject(Stream stream);
- public void WriteObject(Stream stream, object graph);
- public override void WriteObject(XmlWriter writer, object graph);
- …
- }
#T#其中兩者的ReadObject(Straem)、WriteObject(Stream, object)的實(shí)現(xiàn)繼承自基類XmlObjectSerializer,其他方法均為已覆寫或?qū)崿F(xiàn)。從兩個(gè)類型的聲明中可以看出NetDataContractSerializer實(shí)現(xiàn)了IFormatter接口,而 DataContractSerializer沒有,因此只有NetDataContractSerializer能使用.NET基礎(chǔ)結(jié)構(gòu)中的序列化,而 DataContractSerializer則是專用于WCF的。還有一個(gè)細(xì)節(jié)DataContractSerializer的Constructor有一個(gè)Type類型的參數(shù),而NetDataContractSerializer沒有。這可蘊(yùn)藏著深意啊,讀者接著看就明白了。