使用Json.Encode序列化时检测到循环引用

时间:2013-08-06 21:38:34

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

我的情况是Json.Encode在本地工作(localhost),它是64位iis7 windows 7盒。

如果我部署到Windows 2003 32位IIS6我得到循环引用错误。如下所示'Error here'是错误开始的行。

@*var model = '@Html.Raw(Json.Encode(Model))';*@ <<<<Error here
var model = '@Html.GetJson(Model)';

作为尝试解决此问题的一部分,我想也许在服务器上使用的项目dll之一与本地不同,因此我将任何引用dll复制到服务器bin目录。这没有用。

我确实有一个非常简单的修复方法。我宁愿能够识别这个问题。我的猜测是它在服务器上使用的某些dll与本地不同,通过Json.Encode然后在服务器上返回json。

我在第2行显示的分辨率是使用Json.Net和mvc助手

public static MvcHtmlString GetJson(this HtmlHelper htmlHelper, ViewModel vm)
{
    string s = JsonConvert.SerializeObject(vm);
    return new MvcHtmlString(s);
}

有没有人见过这个并解决了? (没有json.net)

1 个答案:

答案 0 :(得分:0)

假设您正在使用实体框架,那么查看框架开发的实体将会对该主题有所了解。例如,我有一个名为Sessions的表和一个名为Enrollments的表,Enrollments表与Sessions表PK具有FK关系。这导致Session对象具有Enrollments集合,并且Enrollment对象具有注册所针对的Session的虚拟实例...这反过来又指向了Enrollments的集合等...您得到了图片,AND为什么循环引用问题被json序列化检测到。

解决方案是不查询代码中的Session对象集合,而是查询其中包含所有相同字段的匿名(无类型)对象。这可以防止Json.Encode()在代码隐藏/服务器端代码中对实体框架正常的循环引用感到困惑,因为它不知道。