Хорошо, давайте по частям.
¿Почему это происходит?
Поскольку у вас есть виртуальные свойства.Если вы используете EF, они вам действительно нужны, если вы используете Lazy loading.Вы можете настроить свой EF так, чтобы он не делал этого в следующем примере:
context.Configuration.ProxyCreationEnabled = false;
, где context - это ваш ObjectContext или DbContext ... при условии, что вы используете EF.Но для большинства сценариев это не очень хороший подход.
Возможное решение
Как я всегда говорю: «нет хороших или плохих решений, просто есть разные способы изависит от контекста ", говоря, что вы можете создавать динамические объекты.
Если вам нужно только сериализовать уникальный объект, вы можете сделать что-то вроде этого
Json(new {@property1=yourObject.property1, @property2=yourObject.property2})
В случае, если выесть список, ну, вы можете сделать это:
var list = new List<dynamic>();
foreach(var item in myRepository.GetAll())
{
list.Add(new
{
@property1= item.property1,
@property2= item.property2,
@property3= item.property3
});
}
return Json(list, JsonRequestBehavior.DenyGet);
Я пытался сделать это как можно более универсальным.Я надеюсь, что это может помочь кому-то !!
С наилучшими пожеланиями и хорошего дня!:)