1

我们有一个通过实现 ISerializable 和使用 BinaryFormatter 来使用序列化的项目。我们正在转向没有 BinaryFormatter 类的 .net compact。我想知道我们是否可以使用 ProtoBuf-Net。我们可以指示 ProtoBuf-Net 使用 GetObjectData() 进行序列化吗?具体来说,我想了解如何使用 Serializer.Serialize(SerializableInfo, ISerializable) 函数。

添加了我查看了源代码,我看到虽然函数

Serializer.Serialize(SerializableInfo, T t) 其中 T is ISerializable 根本不使用约束 T is ISerializable 。为什么 T 被声明为 ISerializable?

4

1 回答 1

2

支持存在(目前ISerializable)作为将 protobuf-net 注入到使用的现有 API 中间的机制BinaryFormatter- 例如,您可以这样做以减少 .NET 远程处理或(序列化)会话状态的开销。但是,这仍然会在包装器中间产生一个 pb-net BLOB BinaryFormatter(特别是,bf 标头指定了具体类型 assembly-qualfied-name)。

关于约束的问题 - 这只是为了帮助指导使用;该 API 仅用作注入via的一部分BinaryFormatterISerializable否则,最好只使用Stream基于 API。

如果您正在查看 CF,那么当然BinaryFormatter不再有用,但Stream基于 API 就可以了。它适用于 CF,但您应该注意,对于具有大量类的模型,当前由于过度使用泛型(“缺少方法”或诸如此类)而导致 CF 出现一些故障。好消息是,我在一些重构方面取得了良好进展,这使得它在较小的框架上更加稳定。

于 2010-02-04T22:31:34.947 回答