如何忽略在MVC视图中检测到的自引用循环?

时间:2017-06-20 18:35:25

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

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

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

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

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

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

如果这不起作用,则需要将设置直接传递给SerializeObject,如@Steve所示。