Я експериментував зі створенням веб-сайту, який використовує MVC з JSON для мого шару презентації та Entity Framework для моделі / бази даних даних. Мій випуск грає з серіалізацією моїх об'єктів Model у JSON.
Я використовую перший метод коду для створення своєї бази даних. Виконуючи метод першого коду, відносини один до багатьох (батько / дитина) вимагає від дитини повернення до батьків. (Приклад код мій бути помилковим, але ви отримаєте малюнок)
class parent
{
public List<child> Children{get;set;}
public int Id{get;set;}
}
class child
{
public int ParentId{get;set;}
[ForeignKey("ParentId")]
public parent MyParent{get;set;}
public string name{get;set;}
}
При поверненні "батьківського" об'єкта через JsonResult кидається помилка кругової посилання, оскільки "дитина" має властивість батьків класу.
Я спробував атрибут ScriptIgnore, але втрачаю здатність дивитися на дочірні об’єкти. Мені потрібно буде в якийсь момент відобразити інформацію в батьківському догляді.
Я намагався зробити базові класи і для батьків, і для дитини, які не мають кругової посилання. На жаль, коли я намагаюся надіслати baseParent та baseChild, вони читаються JSON Parser як їх похідні класи (я впевнений, що ця концепція мені відходить).
Base.baseParent basep = (Base.baseParent)parent;
return Json(basep, JsonRequestBehavior.AllowGet);
Єдине рішення, яке я придумав, - це створити моделі "Перегляд". Я створюю прості версії моделей баз даних, які не включають посилання на батьківський клас. Кожна з цих моделей перегляду має метод повернення Версії бази даних та конструктора, який приймає модель бази даних як параметр (viewmodel.name = databasemodel.name). Цей метод здається вимушеним, хоча працює.
ПРИМІТКА: Я розміщую тут повідомлення, тому що вважаю, що це більше дискусія гідна. Я міг би скористатися іншою схемою дизайну, щоб перейти до цієї проблеми, або це може бути так само просто, як використання іншого атрибуту на моїй моделі. У своїх пошуках я не бачив хорошого методу подолання цієї проблеми.
Моєю кінцевою метою було б мати хороший MVC-додаток, який сильно використовує JSON для спілкування з сервером та відображення даних. Підтримуючи постійну модель у різних шарах (або якнайкраще, наскільки я можу придумати).