Eu tenho experimentado a criação de um site que aproveita o MVC com JSON para minha camada de apresentação e estrutura de entidade para modelo de dados / banco de dados. Meu problema entra em jogo ao serializar meus objetos Model em JSON.
Estou usando o primeiro método de código para criar meu banco de dados. Ao executar o método primeiro do código, um relacionamento um para muitos (pai / filho) exige que o filho tenha uma referência de volta ao pai. (Exemplo de código pode ser um erro de digitação, mas você obtém a imagem)
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;}
}
Ao retornar um objeto "pai" por meio de um JsonResult, um erro de referência circular é gerado porque "filho" possui uma propriedade da classe pai.
Eu tentei o atributo ScriptIgnore, mas perdi a capacidade de examinar os objetos filho. Vou precisar exibir informações em uma visão pai-filho em algum momento.
Eu tentei criar classes base para pai e filho que não têm uma referência circular. Infelizmente, quando tento enviar baseParent e baseChild, eles são lidos pelo Analisador JSON como suas classes derivadas (tenho certeza de que esse conceito está me escapando).
Base.baseParent basep = (Base.baseParent)parent;
return Json(basep, JsonRequestBehavior.AllowGet);
A única solução que eu encontrei é criar modelos "View". Crio versões simples dos modelos de banco de dados que não incluem a referência à classe pai. Cada um desses modelos de exibição possui um método para retornar a Versão do Banco de Dados e um construtor que usa o modelo de banco de dados como parâmetro (viewmodel.name = databasemodel.name). Este método parece forçado, embora funcione.
NOTA: Estou postando aqui porque acho que isso vale mais para discussão. Eu poderia aproveitar um padrão de design diferente para superar esse problema ou poderia ser tão simples quanto usar um atributo diferente no meu modelo. Na minha pesquisa, não vi um bom método para superar esse problema.
Meu objetivo final seria ter um bom aplicativo MVC que aproveite bastante o JSON para se comunicar com o servidor e exibir dados. Mantendo um modelo consistente entre as camadas (ou da melhor maneira possível).