我们有一个项目,它通过实现ISerializable和使用BinaryFormatter来使用序列化。我们正在转向.net compact,它没有BinaryFormatter类。我想知道我们是否可以使用ProtoBuf-Net。我们可以指示ProtoBuf-Net使用GetObjectData()进行序列化吗?具体来说,我想了解如何使用Serializer.Serialize(SerializableInfo,ISerializable)函数。
加 我查看了源代码,我看到了虽然函数
Serializer.Serialize(SerializableInfo,T t)其中T是可ISerializable 不使用约束T根本就是ISerializable。为什么T被宣布为ISerializable?
答案 0 :(得分:2)
ISerializable
支持存在(目前)作为将protobuf-net注入使用BinaryFormatter
的现有API中间的机制 - 例如,您可以这样做以减少开销.NET远程处理或(序列化)会话状态。但是,这仍然导致pb-net BLOB位于BinaryFormatter
包装器的中间(特别是,bf头指定具体类型的assembly-qualfied-name)。
关于约束的问题 - 这只是为了帮助指导使用;该API仅预期用作BinaryFormatter
通过ISerializable
注入的一部分。否则,最好只使用基于Stream
的API。
如果您正在查看CF,那么当然BinaryFormatter
不再有用,但基于Stream
的API很好。它适用于CF,但你应该注意到,对于具有大量类的模型,由于过度使用泛型(“缺少方法”或某些类似的东西)导致CF上存在一些故障。好消息是我正在进行一些重构的good progress,这使得它在较小的框架上更加稳定。