参见英文答案 >
Json and Circular Reference Exception9个
所以我有这笔交易
所以我有这笔交易
楷模
- public class News
- {
- public News()
- {
- this.Created = DateTime.Now;
- }
- public int Id { get; set; }
- public string Title { get; set; }
- public string Preamble { get; set; }
- public string Body { get; set; }
- public DateTime Created { get; set; }
- public int UserId { get; set; }
- public virtual User User { get; set; }
- public int CategoryId { get; set; }
- public int ImageId { get; set; }
- public virtual Image Image { get; set; }
- public virtual Category Category { get; set; }
- }
- public class Image
- {
- public int Id { get; set; }
- public string Name { get; set; }
- public string ImageUrl { get; set; }
- public Byte[] ImageData { get; set; }
- public string ImageMimeType { get; set; }
- }
- public class Category
- {
- public int Id { get; set; }
- public string Name { get; set; }
- }
….以下模型(这些模型连接到EfDbContext)连接到以下存储库…
接口/库
- public class NewsRepository : INewsRepository
- {
- EfDbContext context = new EfDbContext();
- public IQueryable<News> All
- {
- get { return context.News; }
- }
- public IQueryable<News> AllIncluding(params Expression<Func<News,object>>[] includeProperties)
- {
- IQueryable<News> query = context.News;
- foreach (var includeProperty in includeProperties) {
- query = query.Include(includeProperty);
- }
- return query;
- }
- public News Find(int id)
- {
- return context.News.Find(id);
- }
- public void InsertOrUpdate(News news)
- {
- if (news.Id == default(int)) {
- // New entity
- context.News.Add(news);
- } else {
- // Existing entity
- context.Entry(news).State = EntityState.Modified;
- }
- }
- public void Delete(int id)
- {
- var news = context.News.Find(id);
- context.News.Remove(news);
- }
- public void Save()
- {
- context.SaveChanges();
- }
- }
- public interface INewsRepository
- {
- IQueryable<News> All { get; }
- IQueryable<News> AllIncluding(params Expression<Func<News,object>>[] includeProperties);
- News Find(int id);
- void InsertOrUpdate(News news);
- void Delete(int id);
- void Save();
- }
在我的HomeController()中,我得到了一个JsonResult metod,我想返回上下文.
这是方法
Json请求
- [HttpGet]
- public JsonResult GetNews()
- {
- var p = newsRepository.AllIncluding(news => news.Category,news => news.Image);
- return Json(p,JsonRequestBehavior.AllowGet);
- }
我收到以下错误:
序列化“System.Data.Entity.DynamicProxies.News_96C0B16EC4AC46070505EEC7537EF3C68EE6CE5FC3C7D8EBB793B2CF9BD391B3”类型的对象时检测到循环引用.
我猜这与懒加载的东西有关(Iam目前正在学习C#)我发现这篇文章关于这个……
http://hellowebapps.com/2010-09-26/producing-json-from-entity-framework-4-0-generated-classes/
但我没有得到它的工作…我能读到的关于代码的是他们试图深入搜索通过对象…更多我无法弄清楚.
我的问题是如何传递lazyLoading对象?进入json / serializer
或者它不存在,任何关于我如何进行的想法?