反序列化通过ZMQ发送的两个对象

时间:2014-03-03 17:32:34

标签: c# zeromq

我通过Pub-Sub模型通过ZMQ发送数据。

我有2个类,一个叫做A类,它包含两个字符串,另一个是B类,它包含两个双。

我的发布商计划将序列化A类,有时是B类,并通过ZMQ发送。我的客户端程序如何知道发送了哪个类型并进行相应的转换?我尝试执行以下代码,消息框显示MsgPack.MessagePackObject。

var ser = MsgPack.Serialization.MessagePackSerializer.Create<object>();                   
object unpack = ser.Unpack(stream);
MessageBox.Show(unpack.GetType().ToString());

我希望得到类似A类或B类的类型,我会做一个if语句。如果type是A类,我将它转换为A类并执行所需的操作。如果type是B类,我将它转换为B类并执行所需的操作。

我已经搜索了1小时的答案,但我找不到。希望SO会有所帮助。因为我是新手,请温柔地对待我。感谢。

1 个答案:

答案 0 :(得分:0)

你无法(安全地)使用MessagePack,因为它是无模式序列化。你有两个选择 -

  1. 在包含消息类型(A或B)的zeromq消息中添加一个字节前缀。

  2. 使用protobuf而不是message-pack,并且顶级消息类型包含A和B的两种可选消息类型。