我有一個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>>
。