SignalR和基于对象的有效载荷

时间:2014-07-01 16:54:23

标签: c# signalr

我正在与SignalR玩一会儿并将其与之前的一些Pub / Sub工作联系起来。在其中,我们有一个基本事件,其中包含几个必需属性,然后是几个特定有效负载的派生事件。

使用SignalR,我似乎需要根据每个派生事件定义一个集线器,因为Send将处理特定类型。例如,如果我为基类创建一个集线器,我可以发送任何派生类型或基类型而不会出现错误,但我总是返回一个丢失任何派生类型属性的基类型。

似乎我的选择是每种类型的集线器,或者将派生属性放在某种类型的blob中,以便接收器解析。

我的想法有多远?

1 个答案:

答案 0 :(得分:0)

AFAIK,SignalR基于动态方式来描述和(反)序列化有效负载,因此其运行时尝试匹配接收部分上指定的类型,而不尝试进一步匹配任何派生类型。这是一种机制,其优点是无需在客户端和服务器之间共享类型即可工作,但这是您遇到的缺点。这应该解释你所看到的。

您可以将解决方案建立在dynamic的使用基础上,如果您希望保留自己的有效负载层次结构,则必须自己将收到的dynamic值反序列化为这些值的实例,也许在基类的“记录类型”成员的帮助下。您不需要进行完整的解析。