asp.net – 如何在SignalR2中设置Json Serializer设置?

我正在使用Signalr 2,Webapi 2和Ninject for Ioc,我遇到了麻烦.

在SignalR 2.0中,您无法替换JsonSerializer.
正如在这里回答的那样:
SignalR 2.0.0 beta2 IJsonSerializer extensibility

我需要忽略json中的ReferenceLoopHandling,所以我使用了这段代码:

var serializerSettings = new JsonSerializerSettings
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
            NullValueHandling = NullValueHandling.Ignore
        };
        GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => JsonSerializer.Create(serializerSettings));

一切正常,但我也从Webapi调用signalR客户端,除非我在app start中设置此代码,否则调用将无法工作:

GlobalHost.DependencyResolver = new NinjectSignalRDependencyResolver(NinjectIocConfig.Kernel);

现在可以从webapi调用signalR客户端,但不再使用JSON序列化设置.

我怎么能解决这个问题或者我做错了什么?

提前致谢

最佳答案 您是否在本期末看到了我的讨论?

https://github.com/SignalR/SignalR/issues/500#issuecomment-27480715

问题是kernel.TryGet(serviceType)不会返回null,而是一个默认实例,因为singalR现在是一个具体的类型,Ninject在实例化未注册的具体类型时不会失败.

您可以检查具体类型是否在内核中具有显式绑定,如果不使用SignalR Dep.resolver中的值

kernel.GetBindings(serviceType).Any();
点赞