【问题标题】:How to ignore Self referencing loop detected In MVC View?如何忽略在 MVC 视图中检测到的自引用循环?
【发布时间】:2017-06-20 18:35:25
【问题描述】:

如何防止在 MVC 视图中序列化对象时出现“检测到自引用循环”错误?

 var fieldDependants = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model);

我在 Global.asax 中添加了以下配置片段,但仍然出现相同的错误。

config.Formatters.JsonFormatter
            .SerializerSettings
            .ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

谢谢

【问题讨论】:

  • 你在 global.asax 的什么地方添加了这个默认值。您还可以将此值传递给 serializeobject 调用本身。
  • 您的第二个代码 sn -p 配置 MVC 使用的序列化程序。您的第一个代码 sn-p 不使用该序列化程序。
  • 你可以看看我在 “Self Referencing Loop Detected” exception with JSON.Net 页面上的回答。

标签: javascript asp.net-mvc serialization json.net


【解决方案1】:

不知道您将默认设置在Global.asax 中的位置,您可以通过使用SerializeObject 调用明确设置来确保设置是您想要的

Newtonsoft.Json.JsonConvert.SerializeObject(model, New Newtonsoft.Json.JsonSerializerSettings With {.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore})  //VB


Newtonsoft.Json.JsonConvert.SerializeObject(model, New Newtonsoft.Json.JsonSerializerSettings() {ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore})  //CS

【讨论】:

    【解决方案2】:

    JsonFormatter.SerializerSettings 仅供 Web API 使用。从 MVC 视图直接调用 SerializeObject 不会获取它们。您可以尝试在JsonConvert 上设置全局DefaultSettings 委托:

    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
    {
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
    };
    

    如果这不起作用,您需要将设置直接传递给SerializeObject,如@Steve 在他的回答中所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2016-02-15
      • 2014-02-05
      • 1970-01-01
      • 2015-07-14
      • 2017-03-21
      • 2016-04-17
      相关资源
      最近更新 更多