c# - 更改 signalR 中的 ReferenceLoopHandling

标签 c# json signalr json.net

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

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

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

但似乎没有任何改变;它仍然抛出异常 Self referencing loop detected for property

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

最佳答案

借助 SignalR 2,您可以使用 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;

关于c# - 更改 signalR 中的 ReferenceLoopHandling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17610548/

相关文章:

c# - 静态抛出类 : good or bad practice

jquery - 提交后的jqGrid

unit-testing - 具有 SignalR 依赖项的服务单元测试的 Karma 配置

angularjs - SignalR:如何在集线器启动后添加客户端调用?

angular - 调用signalR失败

c# - 如何使用 LINQ 和 Entity Framework 查询具有 'AND' 条件的多对多关系

c# - 在 Windows Azure 中打开和关闭实例的代码

c# - 检查字符串是否包含子字符串列表并保存匹配的子字符串

java - 基于 Jersey Moxy 的休息服务不消耗嵌套 json post 请求负载

java - Android Studio - 从 Google Places Details API 电话号码解析 JSON,首次运行时给出 null