快速掌握WCF序列化
近期看了大量關于WCF的資料,深入的了解了關于WCF的原理機制,我們都知道,WCF內置了兩種序列化方式,DataContractSerializer和NetDataContractSerializer。現在就和大家簡單的分析介紹一下WCF序列化方面的知識吧。
先來看看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)的實現繼承自基類XmlObjectSerializer,其他方法均為已覆寫或實現。從兩個類型的聲明中可以看出NetDataContractSerializer實現了IFormatter接口,而 DataContractSerializer沒有,因此只有NetDataContractSerializer能使用.NET基礎結構中的序列化,而 DataContractSerializer則是專用于WCF的。還有一個細節DataContractSerializer的Constructor有一個Type類型的參數,而NetDataContractSerializer沒有。這可蘊藏著深意啊,讀者接著看就明白了。