c# - 如何模仿内置的 .NET 序列化习惯用法?

标签 c# .net serialization binaryfiles

我有一个库(用 C# 编写),我需要以特定的二进制格式(以确保与 C/Java 库实现兼容)将对象的表示形式读/写到磁盘(或任何流)。该格式需要大量的位打包和一些 DEFLATE 的字节流。然而,我希望我的库尽可能地符合 .NET 的习惯,因此我希望提供一个尽可能接近正常二进制序列化过程的 API。我知道实现 IFormatter 接口(interface)的能力,但我确实无法重用内置序列化堆栈的任何部分,是否值得这样做,或者它只会带来不必要的开销。换句话说:

实现 IFormatter 和合作。

只需提供作用于 Stream 的“序列化”/“反序列化”方法?


下面提出了一个很好的观点,即任何涉及远程处理的情况都需要序列化语义。在使用 MarshalByRef 对象可行的情况下,我很确定这不会成为问题,所以撇开这个不谈,使用 ISerializable/IFormatter 与自定义堆栈(或者,我的理解是远程处理不正确)?

最佳答案

我一直支持后者。如果您所做的只是将文件写入特定框架,那么重用序列化框架就没有多大用处。我在使用自定义序列化框架时遇到的唯一问题是在远程处理时,您必须使您的对象可序列化。

这可能对您没有帮助,因为您必须写入特定格式,但 protobuf 和 sqlite 是进行自定义序列化的好工具。

关于c# - 如何模仿内置的 .NET 序列化习惯用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1083996/

相关文章:

c# - 继续获取 'The LINQ expression node type ' Invoke' 在 LINQ to Entities 的异常中不受支持

c++ - 如何将有向无环图保存到磁盘?

c# - 获取调用窗口的窗口句柄

c# - 从 SHELLEXECUTEINFO 获取类名

c# - 使用c#在excel中选择一个工作表

.net - 如何在 Asp.Net Web api 中返回深度序列化对象(具有复杂类型属性)?

php - 保存的状态生成通知 "error at offset"

javascript - 如何在 razor 页面上将 C# Datetime 对象转换为 json 以进行客户端操作

c# - 将零件渲染到 Orchard CMS 中的不同区域

c# - 是否有令人信服的理由反对使用 C# 关键字 "as"?