我目前正在使用 ZeroMQ 的 clrmq 绑定(bind)在 C# 中设计一个网络包装器。
我的问题是我正在想办法进行反序列化和序列化 透明地;也就是说,网络包装器可以将任何对象作为字节传输,而无需知道或关心其类型,并且可以在另一端反序列化为正确的类型。
我的类(class)层次如下
public interface ITransmission
{
Type Type { get; }
}
public abstract class Transmission<T> : ITransmission
{
public Type Type { get { return typeof(T); } }
}
这个想法是序列化已实现 Transmission 类型的对象;transmit 它们作为字节通过 clrmq 并在另一端反序列化
我理想的解决方案是
- 能够将没有属性修饰或极少属性修饰的任何类型的对象序列化为最好的字节数组格式(因此上面使用 Transmission 对象的想法)
- 能够将接收到的字节数组格式反序列化为类型化对象
人们目前正在使用或做什么来透明地解决序列化和反序列化问题?速度在某些时候会成为一个因素,但此时,我只是想找出有哪些选项。
这里隐含的限制是网络库需要引用所有包含要传输类型的程序集吗?
此外,另一个问题是这是否是一种可行的方法,或者服务器和客户端是否应该从一开始就采用强类型?
感谢您的阅读。
最佳答案
用户 dferraro 的解决方案是一个很好的解决方案。但我认为现在可以通过 C# 中的序列化做得更好很多。我强烈建议您将 ZeroMQ 作为传输与 Google 的 Protobuf 序列化和消息传递组件框架配对。
看看 Protobuf here 的 .NET 实现。我不会详细介绍它的实现方面,因为它有很好的文档记录,而且 StackOverflow 上已经有很多关于它的好问题。事实上,Protobuf 的 C# 实现的作者 - Marc Gravell - 经常闲置,并将用 protobuf-net 回答任何问题标签。
关于c# - 通过 clrmq 进行序列化和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403318/