Я получаю немного разочарованы отсутствием согласованности в рамках различных форм сериализации в .NET:Почему DataContractSerializer не реализует IFormatter?
DataContractSerializer - использует новые атрибуты или старые [Serializable] атрибутов, но сам сериализатору не реализует IFormatter, где делают некоторые из других сериализаторов WCF. Выбрать в.
NetDataContractSerializer - использует новые атрибуты ИЛИ старый, serializer реализует IFormatter, совместим с WCF и является опцией 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 (однопоточный) + 4 ГБ.
Все хорошие моменты о том, чтобы бросать ошибки и т. Д. Из моего опыта, хотя его все еще королевская боль в заднице, когда WCF работает с чем-то вроде Metro или Axis - все советы? Я собираюсь опубликовать некоторые результаты тестов, которые я выполнил как часть вопроса позже. Даже учитывая ваши баллы, хотя я не убежден, что это достаточно хорошие причины для того, чтобы избежать реализации IFormatter - ваши баллы - все детали реализации. –
Я не был в команде дизайнеров Indigo, поэтому я не знаю, почему они решили не реализовывать IFormatter - я только догадываюсь из своих знаний WCF и того, как это работает (и как некоторые .NET-разработчики ошибочны, используя его время от времени) –