Ho sperimentato la creazione di un sito Web che sfrutta MVC con JSON per il mio livello di presentazione e Entity framework per modello / database dati. Il mio numero entra in gioco con la serializzazione degli oggetti del mio modello in JSON.
Sto usando il primo metodo del codice per creare il mio database. Quando si esegue il primo metodo del codice, una relazione uno a molti (genitore / figlio) richiede al figlio di avere un riferimento al genitore. (Esempio codice mio essere un refuso 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 "genitore" tramite JsonResult, viene generato un errore di riferimento circolare perché "figlio" ha una proprietà di classe parent.
Ho provato l'attributo ScriptIgnore ma perdo la capacità di guardare gli oggetti figli. Avrò bisogno di visualizzare le informazioni in una vista figlio genitore ad un certo punto.
Ho provato a creare classi base per entrambi i genitori e i figli che non hanno un riferimento circolare. Sfortunatamente quando provo a inviare baseParent e baseChild questi vengono letti dal parser JSON come classi derivate (sono abbastanza sicuro che questo concetto mi sfugge).
Base.baseParent basep = (Base.baseParent)parent;
return Json(basep, JsonRequestBehavior.AllowGet);
L'unica soluzione che ho trovato è quella di creare modelli "View". Creo versioni semplici dei modelli di database che non includono il riferimento alla classe genitore. Questi modelli di vista hanno ciascuno un metodo per restituire la versione del database e un costruttore che accetta il modello del database come parametro (viewmodel.name = databasemodel.name). Questo metodo sembra forzato sebbene funzioni.
NOTA: sto postando qui perché penso che questa sia una discussione più degna. Potrei sfruttare un modello di design diverso per risolvere 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 avere una bella applicazione MVC che sfrutti pesantemente JSON per comunicare con il server e visualizzare i dati. Pur mantenendo un modello coerente su più livelli (o nel modo migliore che riesco a trovare).