datacontract序列化是否使用反射?

时间:2010-02-28 19:42:36

标签: serialization datacontractserializer datacontract

XmlSerialization为每个类创建一个序列化代理。代理驻留在不同的程序集中,因此它只能序列化公共字段。

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

1 个答案:

答案 0 :(得分:1)

This protobuf-net page显示DataContractSerializer的效果明显优于XmlSerializer。当然,您应该始终使用自己的数据进行测试,但如果您要替换XmlSerializer,则很可能会发现DataContractSerializer是性能提升。

我不确定DataContractSerializer是如何在内部实现的,但通常会对序列化程序进行高度优化。对DataContractSerializer尤其如此,因为它是WCF性能图片的重要组成部分。串行器在运行中生成MSIL代码的情况并不少见。完成此操作后,DynamicMethod允许您(令人惊讶!)绕过可见性检查(请参阅MSDN),这样就可以访问私有字段而无需反射。

来自MSDN

  

给予足够的安全权限,   实现了序列化引擎   使用动态方法可以访问   要启用的私有和受保护数据   未编写的对象的序列化   由引擎创建者。