Bitte beachten Sie, dass ich hier explizit auf SignalR 2.0 verweise ... Ich habe einige (bösen) Ansätze dafür mit SignalR 1.1/1.2 gesehen ... aber keine für 2.0 noch.SignalR 2.0 JSON Serializer zur Unterstützung abgeleiteter Objekte ändern
Hat jemand Erfolg mit der Änderung der SignalR 2.0 Standard JSON Serializer, um das Senden von abgeleiteten Typen zu ermöglichen? Basierend auf dem, was ich über SignalR 2.0 gelesen habe, sollte dies möglich sein, aber ich habe kein Glück und habe nirgends ein vollständiges Beispiel gefunden.
Hier ist, wie ich begann ... jede Hilfe wäre willkommen.
Mein Startup.cs
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// this should allow the json serializer to maintain the object structures
var serializer = new JsonSerializer()
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
};
// register it so that signalr can pick it up
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer);
app.MapSignalR();
}
}
}
Methode auf dem Hub-
public void AddStock(Stock stock)
{
string stockType = stock.GetType().ToString();
Console.WriteLine("The type of stock we got was: " + stockType);
}
Meine Konsole Test-App (dies veröffentlicht auf der Nabe)
myDataHub.Invoke("AddStock", new NyseStock()
{
Company = "Microsoft",
NyseSymbol = "MSFT"
});
myDataHub.Invoke("AddStock", new DaxStock()
{
Company = "Microsoft",
DaxSymbol = "DMSFT"
});
nur für eine gute Maßnahme Aktie. cs
namespace Messages
{
public class Stock
{
public string Company
{
get;
set;
}
public decimal Price
{
get;
set;
}
}
public class NyseStock : Stock
{
public string NyseSymbol
{
get;
set;
}
}
public class DaxStock : Stock
{
public string DaxSymbol
{
get;
set;
}
}
}
Meine erste Neigung war, dass ich es versäumte, den Serializer im Client einzurichten. So habe ich die folgenden nach der Erstellung der Verbindung, aber vor der Schaffung der Nabe Proxy.
myConnection = new HubConnection("http://localhost:64041/");
// Update the serializer to use our custom one
myConnection.JsonSerializer = new JsonSerializer()
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
};
//Make proxy to hub based on hub name on server
myDataHub = myConnection.CreateHubProxy("DataHub");
Dies ist jedoch nur führte zu einer InvalidOperationException (Daten können nicht gesendet werden, weil die Verbindung im ausgeschalteten Zustand ist Call Start vor dem Senden von Daten.) während der myDataHub.Invoke (..) Aufrufe.
Haben Sie das jemals herausgefunden? Ich stoße auf dasselbe Problem. – chad
Das gleiche Problem hier ... –