"'使用类型' System.Data.Entity.DynamicProxies.PrescriptionMaster_2C4C63F6E22DFF8E29DCAC8D06EBAE038831B58747056064834E80E41B5C4E4A'检测到自引用循环。路径' [0] .Patient.PrescriptionMasters"
我尝试了其他解决方案,例如添加
" config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; "
在Webconfig.cs中,但没有任何对我有用。
请帮助我,我该怎么办?
答案 0 :(得分:3)
防止这种情况发生的唯一正确方法是不将实体框架对象(可能包含此类循环)发送到JSON序列化程序(这不太好在知道何时停止序列化。)
相反,创建模仿前端实际需要的EF对象部分的ViewModel,然后使用EF对象填充这些ViewModel。
快速而肮脏的方法是使用匿名对象,例如:
return new
{
Product = new
{
Id = EF_Product.Id,
Name = EF_Product.Name
}
};
一个好的经验法则是只将EF对象中的简单属性(数字,布尔值,字符串,日期时间)分配给ViewModel项。一旦遇到另一个EF对象(或EF对象的集合)的EF对象属性,那么您还需要将这些属性转换为简单的'未链接到EF的对象。
另一方面,有一些库,如AutoMapper。如果您确定需要实际的ViewModel类,那么AutoMapper将帮助以非常结构化的方式将EF对象映射到那些ViewModel。
答案 1 :(得分:1)
只需将其添加到Application_Start
中的Global.asax
:
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter
.SerializerSettings
.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
它将忽略指向对象的引用。