XmlSerialization为每个类创建一个序列化代理。代理驻留在不同的程序集中,因此它只能序列化公共字段。
DataContract序列化也可以序列化私有字段。这是否意味着它使用反射?是不是比使用代理慢(第一次除外)?
答案 0 :(得分:1)
This protobuf-net page显示DataContractSerializer
的效果明显优于XmlSerializer
。当然,您应该始终使用自己的数据进行测试,但如果您要替换XmlSerializer
,则很可能会发现DataContractSerializer
是性能提升。
我不确定DataContractSerializer
是如何在内部实现的,但通常会对序列化程序进行高度优化。对DataContractSerializer
尤其如此,因为它是WCF性能图片的重要组成部分。串行器在运行中生成MSIL代码的情况并不少见。完成此操作后,DynamicMethod
允许您(令人惊讶!)绕过可见性检查(请参阅MSDN),这样就可以访问私有字段而无需反射。
来自MSDN:
给予足够的安全权限, 实现了序列化引擎 使用动态方法可以访问 要启用的私有和受保护数据 未编写的对象的序列化 由引擎创建者。