0

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

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

4

1 回答 1

1

这个 protobuf-net 页面显示的性能DataContractSerializer明显优于XmlSerializer. 当然,您应该始终使用自己的数据进行测试,但如果您正在寻找替换XmlSerializer,您很可能会发现DataContractSerializer性能有所提高。

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

来自MSDN

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

于 2010-02-28T20:11:02.693 回答