我该如何将Entity Framework对象序列化为JavaScript对象(JSON)?我尝试使用JSON.NET,但在序列化时出现以下异常。
异常:Newtonsoft.Json.JsonSerializationException,消息=“自引用循环”
Hitesh
异常:Newtonsoft.Json.JsonSerializationException,消息=“自引用循环”
Hitesh
我曾经遇到过这个问题,通过在导致循环的属性上添加Newtonsoft.Json.JsonIgnoreAttribute来解决了它。显然,该属性将不会被序列化。为了解决这个问题,我通常会在实体中同时保存外键引用ID和外键类。我意识到这不是一种直观(或非常好的面向对象)的方式,但这是Julia Lerman在她的书《Programming Entity Framework: Code First》中推荐的方法。我发现它可以帮助解决Entity Framework中遇到的几个问题。
public class SomeEntity
{
[JsonIgnore]
public ForeignEntity SomeForeignEntity {get;set;}
public Guid ForeignEntityId {get;set;}
}
dataContext.Configuration.ProxyCreationEnabled = false;
public class MailingApiController : ApiController
{
public MailingApiController()
{
PreventDeepSerialization();
}
private static void PreventDeepSerialization()
{
var dataContext = Injector.Get<IIntertwyneDbContext>();
dataContext.Configuration.ProxyCreationEnabled = false;
}
....
var context = new YourEntities();
context.Configuration.ProxyCreationEnabled = false;
var results = context.YourEntity.Take(100).ToList();
您可以通过省略默认的引用循环,安全地返回JSON.NET序列化数据,方法如下:
return JsonConvert.SerializeObject(results, Formatting.Indented,
new jsonSerializerSettings {
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});