2013-07-12 38 views
4

我工作的项目中有两个应用程序;第一个是填充数据库的控制台应用程序,第二个是自承载的signalR服务,用于广播数据库内容发生的任何更改。更改信号中的ReferenceLoopHandlingR

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

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

但它似乎没有任何改变;它仍然会因财产

检测到异常自参照环有没有简单的方法来设置 ReferenceLoopHandling全球和该转换器的行为对使它对任何型号的效果?

+0

这是一个的WebAPI的设置,并具有与SignalR无关 – davidfowl

回答

9

使用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;