2010-02-28 78 views
0

XmlSerialization爲每個類創建一個序列化器代理。代理駐留在不同的程序集中,因此它只能序列化公用字段。datacontract序列化使用反射嗎?

DataContract序列化也可以序列化專用字段。這是否意味着它使用反射?是不是比使用代理(第一次除外)慢?

回答

1

This protobuf-net page顯示DataContractSerializer的性能明顯優於XmlSerializer。當然,你應該總是用你自己的數據進行測試,但是如果你想要取代XmlSerializer,你很可能會發現DataContractSerializer是一個性能提升。

我不確定內部如何實現DataContractSerializer,但通常序列化程序是高度優化的。對於DataContractSerializer尤其如此,因爲它是WCF性能圖的重要組成部分。串行器在運行中生成MSIL代碼並不罕見。完成此操作後,DynamicMethod允許您(令人驚訝地!)繞過可見性檢查(請參閱MSDN),因此可以在不反映的情況下訪問私有字段。

MSDN

如果有足夠的安全權限, 序列化引擎中實現 使用動態方法可以訪問 私有和保護數據,使 系列化引擎不創作者創作 對象。