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



我有Json.Encode在本地(localhost)工作的情况,它是64位iis7windows7框。

如果我部署到Windows200332位IIS6,我会得到循环引用错误。下面显示的"此处出错"是错误开始的行。

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

作为解决这个问题的一部分,我认为服务器上使用的某个项目dll可能与本地的不同,所以我将任何引用dll复制到服务器bin目录中。这无济于事。

我确实有一个很容易的解决办法。我更希望能够确定这个问题。我的猜测是,它在服务器上使用的dll与本地不同,通过json返回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)

假设您使用的是实体框架,看看该框架开发的实体会对主题有所了解。例如,我有一个名为Sessions和Enrollments的表,Enrollments表与Sessions表PK具有FK关系。这导致Session对象具有Enrollments集合,Enrollment对象具有注册所针对的Session的虚拟实例。。。这又指向了一个注册等的集合。。。您将了解json序列化检测到循环引用问题的原因。

解决方案是不查询代码中的Session对象集合,而是查询一个具有所有相同字段的匿名(非类型化)对象。防止Json.Encode()混淆,因为它不知道实体框架在代码背后/服务器端代码中可以使用的循环引用。

相关内容

  • 没有找到相关文章

最新更新