więc heres sprawa mamEntityFramework do obejścia Json? (Okrągła Wniosek ten został wykryty podczas szeregowania obiektu typu ... DynamicProxies)
modele
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; }
}
.... następujących modelach (modele te są połączone do EfDbContext) połączony z następnym repozytorium ...
interfejsu/Repository
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();
}
W moim HomeController() mam metodę JsonResult, którą chcę zwrócić kontekst. Oto Metoda
Json Zapytanie
[HttpGet]
public JsonResult GetNews()
{
var p = newsRepository.AllIncluding(news => news.Category, news => news.Image);
return Json(p, JsonRequestBehavior.AllowGet);
}
pojawia się następujący błąd:
Cykliczne Wniosek ten został wykryty podczas szeregowania obiektu typu System.Data.Entity.DynamicProxies” .News_96C0B16EC4AC46070505EEC7537EF3C68EE6CE5FC3C7D8EBB793B2CF9BD391B3 '.
Domyśliłem się, że to ma coś wspólnego z rzeczy lazyloading (IAM obecnie nauki o języku C#) Znalazłem ten artykuł na ten temat ...
http://hellowebapps.com/2010-09-26/producing-json-from-entity-framework-4-0-generated-classes/
ale nie zrobił i zmusić go do pracy. ... o kodzie mogłem przeczytać, że próbowali głębiej przeszukiwać obiekt ... o wiele więcej nie mogłem wymyślić.
Moje pytanie brzmi: jak mogę przekazać obiekty LazyLoading? do json/serializer lub nie istnieje, żadnych myśli, w jaki sposób mogę kontynuować?
Dzięki za odpowiedzi na !, tak rozwiązałem to tak, jak zrobiłeś, ale chciałem użyć dynamicznego (lazyloading), aby uzyskać wynik json od czasu, gdy jego niepotrzebna praca odtworzenia modelu w kontrolerze, to co myślę ... cóż, spróbuję jeśli ScriptIgnore działa ... dzięki! – Martea
@Martea: Nie ma problemu. Jeśli uważasz, że jest to odpowiedź na twoje pytanie, oznacz to jako odpowiedź. – Kamyar