I am shopping for a BinaryFormatter alternative/replacement.
The current issues I have with BinaryFormatter (and the alternatives should address this) are
1) backwards compatibility (can deserialize Classes serialized using an earlier version)
2) size
3) speed
I have checked out AltSerializer which looks ok, some conflicting reports on speed however it looks like it supports backwards compatibility.
I also looked at protobuf-net which looks fantastic except at this stage it would require alot of work as you have to define all the .proto files.
Perhaps someone using either of the above or something else would care to comment.
I have since learned that protobuf-net will respect the [DataContract] and [DataMember] attributes (no .protos required) so if your classes are WCF-ready or you want to decorate them with aforementioned attributes then you can use protobuf-net out of the box for your classes.
Some work is obviously required to decorate all your classes (v1 of protobuf requires this) however I understand v2 will be able to able to build the model for your undecorated classes.
For backwards compatibility handling: Use any of the IFormatter.Binder, ISerializationSurrogate, OptionalFieldAttribute, IDeserializationCallback API's.
For speed: Try the Gramma.Serialization's FastBinaryFormatter, a replacement for BinaryFormatter, implementing the IFormatter interface, honoring all standard .NET serialization constructs including the above mentioned.
There's also Proto# and dotnet-protobufs.
来源:https://stackoverflow.com/questions/3512776/binaryformatter-alternative