signalR和CustomTypeConverter

Sha*_*ler 2 c# signalr

我想序列化派生类型,如此处所述,但对于signalR,我想实现从JsonConverter派生的自定义转换器

我将它添加到signalR中,如下所示

var serializer = GlobalHost.DependencyResolver.GetService(typeof(JsonSerializer)) as JsonSerializer;
var i = new CustomTypeConverter();
serializer.Converters.Add(i);
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer);
Run Code Online (Sandbox Code Playgroud)

public override bool CanConvert(Type objectType) 我调试此函数时应该处理哪些类型我没有看到我认为是我的解决方案的一部分类型

Sim*_*tes 7

这让我疯了好几个小时.感谢halter73的评论,我能够在我的特殊情况下找到问题的解决方法:我需要管道来为我创建开箱即用的界面实例.所以解决方案如下:

class CustomResolver : Microsoft.AspNet.SignalR.Hubs.DefaultParameterResolver
{
    public override object ResolveParameter( Microsoft.AspNet.SignalR.Hubs.ParameterDescriptor descriptor, Microsoft.AspNet.SignalR.Json.IJsonValue value )
    {
        if( descriptor.ParameterType.IsInterface )
        {
            object TargetObject = <Create the object instance here>
            return value.ConvertTo( TargetObject.GetType() );
        }
        else
        {
            return value.ConvertTo( descriptor.ParameterType );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在你打电话之前

WebApp.Start()
Run Code Online (Sandbox Code Playgroud)

注册此新参数解析器:

GlobalHost.DependencyResolver.Register( typeof( Microsoft.AspNet.SignalR.Hubs.IParameterResolver ), () => new CustomResolver() );
Run Code Online (Sandbox Code Playgroud)