序列化“SubSonic.Schema .DatabaseColumn”类型的对象时检测到循环引用。

.net c# entity-framework json subsonic

我正在尝试做一个简单的JSON返回,但我遇到了问题,我有以下内容。

public JsonResult GetEventData()
{
    var data = Event.Find(x => x.ID != 0);
    return Json(data);
}

我得到了一个HTTP 500,例外情况如此问题的标题所示。我也试过了

var data = Event.All().ToList()

这给了同样的问题。

这是一个错误还是我的实现?

一般承认的答案

似乎您的对象层次结构中存在循环引用,JSON序列化程序不支持该引用。你需要所有的栏目吗?您只能在视图中选择所需的属性:

return Json(new 
{  
    PropertyINeed1 = data.PropertyINeed1,
    PropertyINeed2 = data.PropertyINeed2
});

这将使您的JSON对象更轻松,更容易理解。如果您有许多属性, AutoMapper可用于在DTO对象和View对象之间自动映射。


专家解答

JSON与xml和其他各种格式一样,是一种基于树的序列化格式。如果在对象中有循环引用,它将不会爱你,因为“树”将是:

root B => child A => parent B => child A => parent B => ...

通常有一些方法可以沿某条路径禁用导航;例如,使用XmlSerializer您可以将父属性标记为XmlIgnore 。我不知道这是否可能与json序列化程序有关,也不知道DatabaseColumn是否有合适的标记( 非常不可能,因为它需要引用每个序列化API)




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因