我有一个WebAPI服务器,它具有通过发布Dictionary<long, List<SpecialParam>>
对象来回复订阅请求的集线器。反序列化由SignalR作为抽象类传递的对象
的SpecialParam
列表包含类型SpecialParamA
& SpecialParamB
的项目其中两个继承SpecialParam
。
当我试图捕捉在客户端上发布:
hubProxy.On<Dictionary<long, List<SpecialParam>>>(hubMethod, res =>
{
DoStuff();
});
的DoStuff()
方法不叫。如果我将发布返回值更改为string
,并将代理更改为接收string
值,则会调用DoStuff()
方法。因此,问题在于SpecialParam
项目的反序列化。
我试过配置在服务器端:
var serializer = JsonSerializer.Create();
serializer.TypeNameHandling = TypeNameHandling.All;
var hubConfig = new HubConfiguration();
hubConfig.Resolver.Register(typeof(JsonSerializer),() => serializer);
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer);
但它并没有帮助。
我也尝试添加到客户端:
HubConnection hubConnection = new HubConnection(hubPath);
hubConnection.JsonSerializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto;
hubProxy = hubConnection.CreateHubProxy(hubName);
hubProxy.JsonSerializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto;
而且它也没有帮助。
在其他解决方案中,我发现人们定义了一个新的IParameterResolver
,但仅在服务器接收到集线器方法的输入时调用,而不是在集线器发布输出时调用。
请帮忙!
UPDATE
这是我赶上了菲德勒:
{"$type":"Microsoft.AspNet.SignalR.Hubs.HubResponse, Microsoft.AspNet.SignalR.Core","I":"0"}
这是服务器回复客户端。
更新2
我仍然试图找出如何接受它已经反序列化Dictionary<long, List<SpecialParam>>
。