2013-05-19 66 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串行器設置:

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All}; 
var serializer = new JsonNetSerializer(settings); 
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer),() => serializer); 

但是,當客戶端發送派生消息時,服務器會收到基礎消息。

我應該如何配置串行器才能夠接收派生消息?

注意:我可以手動執行序列化/反序列化並將字符串傳遞給服務器,但這會導致雙重序列化。

回答

0

SignalR不支持這種情況,因爲它需要您的JSON負載包含有關派生類型和程序集的信息。看到這個sample。 在您的有效載荷中添加類型信息在瀏覽器中播放不好。我建議你創建單獨的中心方法來處理每個派生類型。