Я использую SignalR 1.1 с .NET-клиентами. У меня есть один метод в моем концентратору, который принимает объект класса BaseMessage и транслирует его всем клиентам:Сериализация/десериализация производных объектов в SignalR
public void SendMessage(BaseMessage message)
{
Clients.All.BroadCastMessage(message);
}
Клиенты будут проходить полученные сообщения в этот метод:
_hub.Invoke("SendMessage", new ErrorMessage("Some Error")).Wait();
клиент имеет одного обработчика сообщений:
_hub.On<BaseMessage>("BroadCastMessage", OnMessageReceived);
я указал параметры TypeNameHandling.All Serializer при запуске приложения:
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All};
var serializer = new JsonNetSerializer(settings);
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer),() => serializer);
Но когда клиент отправляет производное сообщение, сервер получает базовое сообщение.
Как настроить сериализатор для получения полученных сообщений?
Примечание: Я могу выполнять сериализацию/десериализацию вручную и передавать строки на сервер, но это приводит к двойной сериализации.