2014-02-26 102 views
1

我有以下SignalR客户端的JSON序列

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类型的实例。 Type是一个接口或抽象类,不能实例化。

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

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

+1

您的代码不正确 - 对象是C#中的保留字,所以让它'C obj = new C();' –

+0

我有完全相同的问题。可以手动使用序列化程序,但不能在从C#客户机调用hub.Invoke到C#服务器时使用。 –

回答

0

显然,这是目前不支持,请参阅我的问题here

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

+0

除了IParameterResolver完全是你想要的(至少在SignalR v2中) - 它可以做到这一点。我只是实现了我的代码在我的SignalR方法中接受不可变的接口类型参数的能力。我还得到了SignalR的JSON.Net实例用特定的类型转换器进行了自定义,但这不是严格要求的。 –