Asp.net mvc 发现导致循环引用错误的属性

Asp.net mvc 发现导致循环引用错误的属性,asp.net-mvc,json,javascriptserializer,Asp.net Mvc,Json,Javascriptserializer,我正在尝试反序列化nhibernate对象。由于某种原因,我得到了一个循环参考错误。问题是,我无法从中找出导致错误的属性。我已经用[ScriptIgnoreAttribute]标记了所有连接的类,但仍然没有任何标记。我建议您避免将模型对象传递给视图。您应该定义一个视图模型,该模型专门针对视图的需要进行定制,并且只包含必要的属性。然后在控制器中,可以在模型和视图模型之间进行映射。例如: public ActionResult Foo() { SomeModel model = _repos

我正在尝试反序列化nhibernate对象。由于某种原因,我得到了一个循环参考错误。问题是,我无法从中找出导致错误的属性。我已经用[ScriptIgnoreAttribute]标记了所有连接的类,但仍然没有任何标记。

我建议您避免将模型对象传递给视图。您应该定义一个视图模型,该模型专门针对视图的需要进行定制,并且只包含必要的属性。然后在控制器中,可以在模型和视图模型之间进行映射。例如:

public ActionResult Foo()
{
    SomeModel model = _repository.GetModel();
    SomeViewModel viewModel = Mapper.Map<SomeModel, SomeViewModel>(model);
    return Json(viewModel);
}
public ActionResult Foo()
{
SomeModel model=_repository.GetModel();
SomeViewModel=Mapper.Map(model);
返回Json(viewModel);
}

这样,您就不必再担心循环引用,因为您可以完全控制视图模型,并且只显示视图所需的内容。

我明白了。我一直在考虑合并一个类似的工具。虽然这是一种战略解决方案。添加这样一个实用程序需要多少成本?@vondip,这是一个免费工具。我一直在使用,在生产中从来没有任何缺陷。显然,如果公司政策禁止您使用第三方工具,您可以随时手动进行映射。只需编写一个映射器类,它将逐个复制必要的属性。