2014-02-19 150 views
6

你好我正在使用signalR 2.02,我不能在我的客戶端得到正確的派生類。SignalR派生類型

我有以下的情況

Class A {} 
Class B : A{} 

Class Other 
{ 
    public A _member {get;set} 
} 

Other instance = new Other() { _member = new B()} 

我派我的情況下,從中心到客戶端,我希望在客戶端我會看到_member類型爲B,但我認爲這是一個。

我試圖改變在服務器端的串行如下,但都沒有效果

var serializer = new JsonSerializer() 
{ 
    TypeNameHandling = TypeNameHandling.All, 
}; 
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer); 
+0

您使用的是國際奧委會像Ninject? – Anders

+0

我沒有使用任何IOC –

回答

4

這是我如何管理在需要時通過定義序列化,包括全類型的解決(默認爲不包括他們)。

在服務器端:

var serializer = GlobalHost.DependencyResolver.GetService(typeof(JsonSerializer)) as JsonSerializer; 

serializer.TypeNameHandling = TypeNameHandling.Auto; GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer);

在客戶端:

_connection = new HubConnection(http://localhost:8080); 
_hubProxy = _connection.CreateHubProxy("MyHub"); 
_hubProxy.JsonSerializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto; 
+2

這不適用於我。如果我將它設置爲Auto,則沒有任何更改,並且我仍然收到服務器上的基類。如果我將它設置爲其他任何對象(對象或全部),它已經在_hubProxy.Start()方法上拋出了「錯誤500內部服務器錯誤」,所以看起來連接本身已經失敗。無論哪種方式,它不工作....任何幫助? –