SignalR派生类型

Sha*_*ler 6 c# json.net signalr

您好我使用的是signalR 2.02,我无法在客户端获取正确的派生类.

我有以下情况

Class A {}
Class B : A{}

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

 Other instance = new Other() { _member = new B()}  
Run Code Online (Sandbox Code Playgroud)

我将我的实例从集线器发送到客户端,我希望在客户端我会看到_member类型为B,但我将其视为A.

我已经尝试在服务器端更改序列化程序,如下所示,但没有效果

var serializer = new JsonSerializer()
{
    TypeNameHandling = TypeNameHandling.All,
};
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer); 
Run Code Online (Sandbox Code Playgroud)

Sha*_*ler 5

这就是我通过定义序列化程序在需要时包含完整类型来设法解决的方法(默认值是不包含它们)。

在服务器端:

var serializer = GlobalHost.DependencyResolver.GetService(typeof(JsonSerializer)) as JsonSerializer; 
serializer.TypeNameHandling = TypeNameHandling.Auto;
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer);
Run Code Online (Sandbox Code Playgroud)

在客户端:

 _connection = new HubConnection(http://localhost:8080);
 _hubProxy = _connection.CreateHubProxy("MyHub");
 _hubProxy.JsonSerializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto;
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用。如果我将其设置为 Auto,则不会发生任何变化,并且我仍然会在服务器上收到基类。如果我将其设置为其他任何内容(对象或全部),它已经在 _hubProxy.Start() 方法上抛出“错误 500 内部服务器错误”,因此连接本身似乎已经失败。无论哪种方式都不起作用....有什么帮助吗? (2认同)