我正在使用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序列化设置。
我如何解决这个问题或我做错了什么?
提前致谢
答案 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不会将其序列化。