更改信号R中的ReferenceLoopHandling



我在一个项目中工作,我们有两个应用程序;第一个是填充数据库的控制台应用程序,第二个是自托管的signalR服务,它广播数据库内容发生的任何更改。

控制台应用程序发送已更改的模型,服务将其发布给所有相关方。但是,当模型具有循环依赖关系时,就会出现问题。我试着做这样的事情:

var config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling =          ReferenceLoopHandling.Ignore;

但它似乎没有任何改变;它仍然抛出一个异常为属性检测到的自引用循环

是否有任何简单的方法可以全局设置ReferenceLoopHandling,并使其对转换器所作用的任何模型产生影响?

使用SignalR2,您可以使用DepandyResolver来替换Json.Net序列化程序。为了解决我的应用程序中的引用循环问题,我使用了以下内容:

  protected void Application_Start()
  {
     var serializerSettings = new JsonSerializerSettings();
     serializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
     serializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
     var serializer = JsonSerializer.Create(serializerSettings);
     GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer); 
  }

如果您在客户端上使用hubProxy,则需要类似的设置:

hubProxy.JsonSerializer.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
hubProxy.JsonSerializer.PreserveReferencesHandling = PreserveReferencesHandling.Objects;

相关内容

  • 没有找到相关文章

最新更新