【发布时间】:2009-12-26 20:38:36
【问题描述】:
我对 .NET 中不同形式的序列化缺乏一致性感到有些沮丧:
DataContractSerializer - 使用新的属性或旧的 [Serializable] 属性,但序列化程序本身并没有实现 IFormatter,而其他一些 WCF 序列化程序会这样做。选择加入。
NetDataContractSerializer - 使用新属性或旧属性,序列化程序实现 IFormatter,与 WCF 兼容,并且是 Opt IN。似乎是理想的解决方案!
XmlSerializer - 完全独立的属性集,但是是遗留的,所以可以原谅。
BinaryFormatter - 实现 IFormatter 并使用 [Serializable] 属性。选择退出。
所以我的问题是,为什么 DataContractSerializer 不能与 BinaryFormatter 保持至少相当的可互换性?
我真的希望他们从一开始就为此选择了一个干净整洁的界面,对于通常如此有序的 .NET 框架来说,这真是太可惜了!
编辑:仅针对那些感兴趣的人(我知道这与该主题的其余部分并不真正相关),我一直在对我认为最有可能“在场”的内容进行时间和规模基准测试wire" 序列化方法:
============ Serialization ============
Protobuf x158,194 39,549 per/sec 1.00
OldFieldbase x58,191 14,548 per/sec 2.72
Fieldbase x57,445 14,361 per/sec 2.75
DataContract x54,611 13,653 per/sec 2.90
Binary x29,466 7,367 per/sec 5.37
Net x28,170 7,043 per/sec 5.62
Json x10,605 2,651 per/sec 14.92
和尺寸:
============ SerializationSizes ============
Protobuffers 209 bytes 1.00
Fieldbase 246 bytes 1.18
OldFieldbase 248 bytes 1.19
Json 728 bytes 3.48
DataContract 1227 bytes 5.87
Net 1658 bytes 7.93
Binary 1826 bytes 8.74
注意:在 Core2 T9300(单线程)+ 4GB 上。
【问题讨论】:
标签: .net wcf serialization