在Web应用程序中检测到属性的自引用循环

本文关键字:属性 自引用 循环 检测 Web 应用程序 | 更新日期: 2023-09-27 17:58:33

我正在尝试将移动服务应用程序移植到web应用程序。为此,我创建了一个新的web应用程序,并将相关代码从工作的移动服务复制到我创建的新web应用程序(使用移动应用程序模板。
我在新应用程序的启动方法中有以下代码:

 public partial class Startup
{
    public static void ConfigureMobileApp(IAppBuilder app)
    {
        HttpConfiguration config = new HttpConfiguration();
        new MobileAppConfiguration()
            .UseDefaultConfiguration()
            .ApplyTo(config);
        // Use Entity Framework Code First to create database tables based on your DbContext
        Database.SetInitializer(new MobileServiceInitializer());
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

        config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize;
        config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
        app.UseWebApi(config);
        MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings();
   }
}

配置。格式化程序是从原始应用程序中复制的,该应用程序将实体及其子级返回到api控制器的json输出。

在新的应用程序中,我不得不将[MobileAppController]添加到我的api控制器中。我从web应用程序应用程序中的控制器收到以下错误:检测到属性Teams的自引用循环(该模型有团队-->玩家和玩家有团队ID)

基于这个详细的问题:检测到自引用循环-正在将数据从WebApi返回到浏览器

上面的代码应该像在我的移动服务应用程序中一样工作。web服务应用程序似乎忽略了配置。格式化程序值,因为我已经尝试了上面问题中的每个值,但我仍然得到相同的错误
如果我将[JSON Ignore]属性放在Child列表之前,那么我不会得到错误,但也不会将子级放回JSON中。如何使此web应用程序接受格式设置值?

在Web应用程序中检测到属性的自引用循环

感谢您的宝贵意见。感谢@dbc为我指出这个问题。我花了3天的时间寻找,但没有找到。所以很明显,我是正确的,移动应用程序忽略了json格式化程序。你让我发表这篇文章[json-neterror]。在DTO之前添加属性[JsonObject(IsReference=true)]可以用最少的代码解决问题。[json网络错误]:stackoverflow.com/questions/7397207/…–Haim Katz 7月24日13:41