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

时间:2009-04-17 19:04:16

标签: c# .net serialization remoting

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

不确定是否可以使用远程处理执行此操作 - 您可能必须使用ISerializable

答案 1 :(得分:1)

如果要显式处理进程之间的流字节,请使用管道。这是named pipes的一个入门,Google也有很多。

答案 2 :(得分:1)

您可以实施IClientFormatterSinkProvider& IServerFormatterSinkProvider并配置通道格式化程序(f.e。via configuration)。

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