2013-05-19 2 views
2

Я использую 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); 

Но когда клиент отправляет производное сообщение, сервер получает базовое сообщение.

Как настроить сериализатор для получения полученных сообщений?

Примечание: Я могу выполнять сериализацию/десериализацию вручную и передавать строки на сервер, но это приводит к двойной сериализации.

ответ

0

SignalR не поддерживает этот сценарий, так как для его полезной нагрузки JSON потребуется информация о производном типе и сборке. См. Это sample. Добавление информации о типе в вашу полезную нагрузку не будет хорошо работать с браузерами. Я предлагаю вам создавать индивидуальные методы-концентраторы для обработки каждого из ваших производных типов.

Смежные вопросы