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