【问题标题】:ASP.NET MVC ControllerBase.Json() fails to generate valid JSON for NHibernate collectionsASP.NET MVC ControllerBase.Json() 无法为 NHibernate 集合生成有效的 JSON
【发布时间】:2009-11-18 13:22:53
【问题描述】:

我在 ASP.NET MVC 操作中使用 return Json(whatever); 通过 JSON 将数据返回到我的页面。我正在使用 jQuery 来执行 JSON 请求以及随后与 DOM 的交互。

whatever 包含带有集合成员的NHibernate 对象(即包含ISet 对象)时,jQuery 永远不会调用回调函数。

我们使用 jQuery 和 NHibernate 是最新版本,ASP.NET MVC 版本 1.0。

有人遇到过这个问题吗?你是如何解决它的? (除了不通过 ISet 的)

【问题讨论】:

  • 我不使用 NHibernate,但是您是否尝试过点击将手动触发该操作的 URL 以查看它的输出?

标签: jquery asp.net-mvc nhibernate json


【解决方案1】:

是的,NHibernate 放入的状态包非常难以正确序列化为 JSON。我会创建一个新对象并手动为其分配值,包括子集合,然后将新对象传递给 Json 序列化程序返回方法,因为它不会包含所有状态包内容。

【讨论】:

    【解决方案2】:

    发现问题。我的 Hibernate 对象有循环引用。这本身并不是设计问题,但由于 JSON(请注意,这是一种表示法)是基于树的,它无法处理循环引用,因此引发了异常。

    例如,JSON.net 可以更好地处理引用循环,尽管不像我希望的那样精细。

    【讨论】:

    【解决方案3】:

    快速的方法是将数据投影到一个新的对象中,这是一个具有您想要序列化的属性的自定义类。

    类似: 假设您使用 LINQ 循环短途,如果没有,您可以使用 foreach;

            var whatever = Myclass.Select(t => new MyJSonClass{
                           p1 = t.property1,
                           p2= t.t.property2
                           });
           return Json(whatever);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多