如何在SignalR2中设置Json Serializer设置?

时间:2014-02-15 17:27:58

标签: asp.net json asp.net-web-api inversion-of-control signalr

我正在使用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序列化设置。

我如何解决这个问题或我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:2)

您是否在本期末看到了我的讨论?

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

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

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

kernel.GetBindings(serviceType).Any();

答案 1 :(得分:0)

我的2美分 - 您可以将[JsonIgnore]属性添加到您需要忽略的属性中,Json.net不会将其序列化。