EntityFramework查询数据的时候默认是启用了延时加载机制,在查询树形结构数据时,序列化成Json的时候可能会发生对象循环引用(Parent与Children相互引用)。这种情况有两种解决方案:
1.单独或全局关闭延时加载机制
public List<TEntity> Query(Expression<Func<TEntity, bool>> filter, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> sort, int pageIndex, int pageSize, out int total, bool islaxyLod=true,params Expression<Func<TEntity,object>>[] paths) { Context.Configuration.LazyLoadingEnabled = islaxyLod; //延时加载设置为false var query = DbSet.AsQueryable(); query = paths.Aggregate(query, (current, path) => current.Include(path)) .Where(filter); total = query.Count(); return sort(query).Skip((pageIndex - 1) * pageSize) .Take(pageSize).ToList(); }
2.配置JsonSerializerSettings的ReferenceLoopHandling属性值为ReferenceLoopHandling.Ignore
JsonConvert.SerializeObject(obj, new JsonSerializerSettings() { DateFormatString ="yyyy-MM-dd HH:mm:ss.fff", //指定时间格式 ReferenceLoopHandling = ReferenceLoopHandling.Ignore //忽略循环引用,默认是throw exception });
本文介绍了在使用EntityFramework查询树形结构数据时,遇到序列化成JSON时可能出现的对象循环引用问题,并提供了两种解决方案:一是关闭延迟加载机制,二是配置JsonSerializerSettings忽略循环引用。
8528

被折叠的 条评论
为什么被折叠?



