我有一个库(用 C# 编写),我需要以特定的二进制格式(以确保与 C/Java 库实现兼容)将对象的表示形式读/写到磁盘(或任何流)。该格式需要大量的位打包和一些 DEFLATE 的字节流。然而,我希望我的库尽可能地符合 .NET 的习惯,因此我希望提供一个尽可能接近正常二进制序列化过程的 API。我知道实现 IFormatter 接口(interface)的能力,但我确实无法重用内置序列化堆栈的任何部分,是否值得这样做,或者它只会带来不必要的开销。换句话说:
实现 IFormatter 和合作。
或
只需提供作用于 Stream 的“序列化”/“反序列化”方法?
下面提出了一个很好的观点,即任何涉及远程处理的情况都需要序列化语义。在使用 MarshalByRef 对象可行的情况下,我很确定这不会成为问题,所以撇开这个不谈,使用 ISerializable/IFormatter 与自定义堆栈(或者,我的理解是远程处理不正确)?
最佳答案
我一直支持后者。如果您所做的只是将文件写入特定框架,那么重用序列化框架就没有多大用处。我在使用自定义序列化框架时遇到的唯一问题是在远程处理时,您必须使您的对象可序列化。
这可能对您没有帮助,因为您必须写入特定格式,但 protobuf 和 sqlite 是进行自定义序列化的好工具。
关于c# - 如何模仿内置的 .NET 序列化习惯用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1083996/