【问题标题】:SignalR client Side Json serializerSignalR 客户端 Json 序列化程序
【发布时间】:2014-02-26 06:43:15
【问题描述】:

我有以下

class A : ISomthing{}

Class B : ISomthing{}

interface ISomthing{}

Class C { public ISomthing _member {get;set}}

我尝试将以下对象从我的 .net signalR 客户端发送到我的集线器,我正在使用 signalR 2.0.2

C obj = new C();
obj._member  = new A();

我收到以下错误,无法创建 ISomthing 类型的实例。类型是接口或抽象类,不能实例化。

在我的客户端和服务器端,我使用 JsonSerializer.TypeNameHandling = TypeNameHandling.Auto;

更新: 该对象可以自己序列化,使用 signalR 序列化器: var textWriter = new StringWriter(); _hubProxy.JsonSerializer.Serialize(textWriter, obj);

【问题讨论】:

  • 你的代码不正确——object是C#中的保留字,所以改成C obj = new C();
  • 我也有同样的问题。手动使用序列化程序,但在调用 hub 时不能。从 C# 客户端调用到 C# 服务器。

标签: c# json signalr signalr-hub


【解决方案1】:

显然目前不支持此功能,请参阅我的问题here

我得到的答案是: “DependencyResolver 注册了一个 IParameterResolver,它负责反序列化服务器端输入。IParameterResolver 由 DefaultParameterResolver 实现,它不使用注册 DependencyResolver 的 JsonSerializer。msdn.microsoft.com/en-us/library/jj919135(v=vs .118).aspx"

【讨论】:

  • 除了 IParameterResolver 正是您想要的(至少在 SignalR v2 中) - 它可以做到这一点。我刚刚实现了我的代码在我的 SignalR 方法中接受不可变接口类型参数的能力。我还使用特定类型转换器定制了 SignalR 的 JSON.Net 实例,尽管这不是严格要求的。
猜你喜欢
  • 1970-01-01
  • 2010-09-10
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 2011-01-30
相关资源
最近更新 更多