【问题标题】:asp.net and signalR , JsonException: A possible object cycle was detectedasp.net 和 signalR,JsonException:检测到可能的对象循环
【发布时间】:2021-11-19 07:17:52
【问题描述】:

我目前正在使用 asp.net 5 anuglar 12 和 signalR 进行项目。 从服务器获取数据时,我面临以下错误

“Utils.js:190 错误:连接断开并出现错误'错误:服务器在关闭时返回错误:连接关闭并出现错误。JsonException:检测到可能的对象循环。这可能是由于循环或如果对象深度大于最大允许深度 64。考虑在 JsonSerializerOptions 上使用 ReferenceHandler.Preserve 以支持循环。'。"

我要返回的对象在下面

    public class TeamBreaksDashboard
{
    public List<ChartConfiguration> TeamBreaksDashboardDetails { get; set; }
    public TeamBreaksDashboard()
    {
        TeamBreaksDashboardDetails = new List<ChartConfiguration>();
    }
}
public class ChartConfiguration
{
    public string ChartKey { get; set; }
    public string ChartName { get; set; }
    public List<DashboardData> DashboardData { get; set; }
    public ChartConfiguration()
    {
        DashboardData = new List<DashboardData>();
    }
}
public class DashboardData
{
    public string Name { get; set; }
    public int Value { get; set; }
    public string Color { get; set; }
}

错误与对象循环问题有关,但我在代码中没有看到任何循环,我尝试在我的 startup.cs 中使用以下代码,但运气不佳

            .AddNewtonsoftJson(options =>
        options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
        );

【问题讨论】:

    标签: asp.net angular signalr signalr-hub signalr.client


    【解决方案1】:

    问题在于异步方法

            public async Task<TeamBreaksDashboard> GetTeamBreakss()
        {
            var teamBreaksDashboard = await _dashboardService.GetTeamBreaksDashboardDetails();
    
            if (teamBreaksDashboard == null)
            {
                throw new TGAppException($"no records fount.");
            }
            _ = new TimerManager(() =>_hub.Clients.All.SendAsync("transferdashboarddata", _dashboardService.GetTeamBreaksDashboardDetails()));
    
            return teamBreaksDashboard;
        }
    

    我把上面的代码改成下面的

        public async Task<TeamBreaksDashboard> GetTeamBreaks()
        {
            var teamBreaksDashboard = await _dashboardService.GetTeamBreaksDashboardDetails();
    
            if (teamBreaksDashboard == null)
            {
                throw new TGAppException($"no records fount.");
            }
            _ = new TimerManager(async () => await _hub.Clients.All.SendAsync("transferdashboarddata", await _dashboardService.GetTeamBreaksDashboardDetails()));
    
            return teamBreaksDashboard;
        }
    

    【讨论】:

      猜你喜欢
      • 2021-03-17
      • 2020-05-28
      • 2021-08-30
      • 1970-01-01
      • 2020-04-27
      • 2020-05-04
      • 2021-08-01
      • 2020-07-06
      • 2021-12-09
      相关资源
      最近更新 更多