【问题标题】:Is it possible to use ProtoBuf-Net with ISerializable mechanism?是否可以将 ProtoBuf-Net 与 ISerializable 机制一起使用?
【发布时间】:2010-02-04 15:34:14
【问题描述】:

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

已添加 我查看了源代码,但我看到了函数

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

【问题讨论】:

    标签: c# protobuf-net


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨,马克,感谢您回答问题。现在我明白了那个 API 有什么用。它将在 GetObjectData() 中用于以 proto-buf 格式存储结果数据。
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 2019-08-03
    • 2019-11-02
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多