2014-02-19 16 views
6

Hallo ich benutze signalR 2.02, ich kann nicht die richtige abgeleitete Klasse in meinem Client erhalten.SignalR abgeleitete Typen

Ich habe folgende Situation

Class A {} 
Class B : A{} 

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

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

ich mein Beispiel von der Nabe an den Client gesendet, ich auf der Client-Seite erwarten i _member Typen wie B sehen werden, aber ich sehe es als A.

Ich habe versucht, den Serializer auf der Serverseite wie folgt zu ändern, aber ohne Wirkung

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

Verwenden Sie einen IoC wie Ninject? – Anders

+0

Ich verwende keine IOC –

Antwort

4

Dies ist, wie ich durch die Definition der Serializer umfassen vollständige Typen bei Bedarf zu lösen verwaltet (Die Standardeinstellung ist um sie nicht einzuschließen).

Auf der Serverseite:

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

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

Auf der Clientseite:

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

Dies funktioniert nicht für mich. Wenn ich es auf Auto setze, ändert sich nichts und ich erhalte immer noch die Basisklasse auf dem Server. Wenn ich es auf etwas anderes (Objects, oder All) setze, wirft es bereits einen "error 500 Internal Server Error" auf der _hubProxy.Start() Methode, so scheint es, dass die Verbindung selbst bereits fehlschlägt. So oder so funktioniert es nicht .... Irgendwelche Hilfe? –

Verwandte Themen