Я экспериментировал с созданием веб-сайта, который использует 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 выдается ошибка циклической ссылки, поскольку у «потомка» есть свойство класса parent.
Я пробовал атрибут ScriptIgnore, но я теряю способность смотреть на дочерние объекты. Мне нужно будет отображать информацию в родительском дочернем виде в какой-то момент.
Я попытался сделать базовые классы для родителей и детей, которые не имеют циклическую ссылку. К сожалению, когда я пытаюсь отправить baseParent и baseChild, они читаются JSON Parser как их производные классы (я уверен, что эта концепция ускользает от меня).
Base.baseParent basep = (Base.baseParent)parent;
return Json(basep, JsonRequestBehavior.AllowGet);
Единственное решение, которое я придумала, - это создание моделей «View». Я создаю простые версии моделей базы данных, которые не включают ссылку на родительский класс. Каждая из этих моделей представления имеет метод для возврата версии базы данных и конструктор, который принимает модель базы данных в качестве параметра (viewmodel.name = databasemodel.name). Этот метод кажется принудительным, хотя он работает.
ПРИМЕЧАНИЕ: я публикую здесь, потому что думаю, что это более достойное обсуждение. Я мог бы использовать другой шаблон проектирования, чтобы преодолеть эту проблему, или это могло быть так же просто, как использование другого атрибута в моей модели. В своих поисках я не нашел хорошего способа преодолеть эту проблему.
Моей конечной целью было бы иметь красивое приложение MVC, которое активно использует JSON для связи с сервером и отображения данных. Поддерживая постоянную модель в разных слоях (или настолько, насколько я могу придумать).