Ho sperimentato la creazione di un sito Web che sfrutta MVC con JSON per il mio livello di presentazione e il framework Entity per il modello di dati / database. My Issue entra in gioco con la serializzazione degli oggetti Model in JSON.
Sto usando il primo metodo di codice per creare il mio database. Quando si esegue il primo metodo con codice, una relazione una a molte (padre / figlio) richiede che il figlio abbia un riferimento al padre. (Esempio di codice my be a typo ma ottieni l'immagine)
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;}
}
Quando si restituisce un oggetto "parent" tramite un JsonResult viene generato un errore di riferimento circolare perché "child" ha una proprietà di parent parent.
Ho provato l'attributo ScriptIgnore ma perdo la possibilità di guardare gli oggetti figlio. A un certo punto dovrò visualizzare le informazioni in una vista figlio principale.
Ho provato a creare classi di base sia per i genitori che per i figli che non hanno un riferimento circolare. Sfortunatamente quando provo a inviare baseParent e baseChild, questi vengono letti da JSON Parser come classi derivate (sono abbastanza sicuro che questo concetto mi stia sfuggendo).
Base.baseParent basep = (Base.baseParent)parent;
return Json(basep, JsonRequestBehavior.AllowGet);
L'unica soluzione che ho escogitato è quella di creare modelli "Visualizza". Creo versioni semplici dei modelli di database che non includono il riferimento alla classe genitore. Ciascuno di questi modelli di vista ha un metodo per restituire la versione del database e un costruttore che accetta il modello di database come parametro (viewmodel.name = databasemodel.name). Questo metodo sembra forzato sebbene funzioni.
NOTA: sto postando qui perché penso che questo sia più degno di discussione. Potrei sfruttare un diverso modello di progettazione per superare questo problema o potrebbe essere semplice come utilizzare un attributo diverso sul mio modello. Nella mia ricerca non ho visto un buon metodo per superare questo problema.
Il mio obiettivo finale sarebbe quello di avere una bella applicazione MVC che sfrutta pesantemente JSON per comunicare con il server e visualizzare i dati. Pur mantenendo un modello coerente tra i livelli (o il meglio che posso trovare).