c# - 通过 clrmq 进行序列化和反序列化

标签 c# serialization zeromq

我目前正在使用 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 并在另一端反序列化

我理想的解决方案是

  1. 能够将没有属性修饰或极少属性修饰的任何类型的对象序列化为最好的字节数组格式(因此上面使用 Transmission 对象的想法)
  2. 能够将接收到的字节数组格式反序列化为类型化对象

人们目前正在使用或做什么来透明地解决序列化和反序列化问题?速度在某些时候会成为一个因素,但此时,我只是想找出有哪些选项。

这里隐含的限制是网络库需要引用所有包含要传输类型的程序集吗?

此外,另一个问题是这是否是一种可行的方法,或者服务器和客户端是否应该从一开始就采用强类型?

感谢您的阅读。

最佳答案

用户 dferraro 的解决方案是一个很好的解决方案。但我认为现在可以通过 C# 中的序列化做得更好很多。我强烈建议您将 ZeroMQ 作为传输与 Google 的 Protobuf 序列化和消息传递组件框架配对。

看看 Protobuf here 的 .NET 实现。我不会详细介绍它的实现方面,因为它有很好的文档记录,而且 StackOverflow 上已经有很多关于它的好问题。事实上,Protobuf 的 C# 实现的作者 - Marc Gravell - 经常闲置,并将用 protobuf-net 回答任何问题标签。

关于c# - 通过 clrmq 进行序列化和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403318/

相关文章:

c# - 在 C# 中执行多线程事件的奇怪行为

c# - Azure辅助角色刚开始工作

javascript - 如何 "recursively"对调用其他作用域函数的 javascript 函数进行字符串化?

c# - 多列组合框中的选定值

Java 序列化对象(如区域)

python - 为什么 pyzmq 订阅者与 asyncio 的行为不同?

c - ZeroMQ - 模拟多个客户端到一台服务器的标准套接字

c# - 使用 C# winform 的 zeromq pub/sub 示例

c# 2008 SQL Server 快速连接字符串

c# - 使用 ElemMatch 的 ArgumentNullException