如何在.NET远程处理期间使用自定义序列化?

我编写了一个自定义序列化例程,它不使用ISerializable或SerialzableAttribute将我的对象保存到文件中。

我也远程调用这些相同的对象,并希望使用相同的序列化技术。 但是,我不想实现ISerializable,因为我的序列化方法与我的对象完全分离(我希望它保持这种方式)。

有没有一种简单的方法(可能有远程接收器),我可以在其中获取流并向其写入字节,另一方面从中读取字节,跳过.NET中的序列化框架?

如果你想使用远程处理,那么你只能使用BinaryFormatter 。 通常,您可以使用“序列化代理”来提供与格式化程序分开的序列化程序,但AFAIK这不能用于.NET远程处理。

然而; 如果您编写自己的RPC堆栈(例如,通过TCP / IP或HTTP),您将拥有更多控制权。 同样,使用WCF,您可以通过行为替换序列化程序。 我在protobuf-net中使用这两个技巧(WCF钩子在这里 )。

不知道你可以通过远程处理来做到这一点 – 你可能不得不使用ISerializable

如果要显式处理进程之间的流字节,请使用管道。 这是一个关于命名管道的入门,谷歌也有很多。

您可以实现IClientFormatterSinkProvider和IServerFormatterSinkProvider并配置通道格式化程序( 通过配置 )。

有关实现的详细信息,请参阅BinaryServerFormatterSinkProvider / BinaryServerFormatterSink和BinaryClientFormatterSinkProvider / BinaryClientFormatterSink。