У меня есть сервер WebAPI, у которого есть концентратор, который отвечает на запросы Подписки, публикуя объект Dictionary<long, List<SpecialParam>>
.Объект Deserialize, переданный как абстрактный класс 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"}
Это то, что сервер отвечает клиенту.
UPDATE 2
Я все еще пытаюсь выяснить, как получить это уже десериализации в Dictionary<long, List<SpecialParam>>
.