2012-04-24 11 views
13

Ho provato questo codice nel mio controller:Un riferimento circolare rilevato durante la serializzazione di un oggetto di tipo

List<ProductListingModels> prom = new List<ProductListingModels>(); 

prom.Add(new ProductListingModels() 
{ 
    ID = item.ID, 
    Name = item.Name, 
    DepartmentID = item.DepartmentID.Value, 
    BrandID = item.BrandID.Value 
}); 

jr.Data = prom; 
jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
return Json(new 
{ 
    ja = jr.Data, 
}, JsonRequestBehavior.AllowGet); 

Questo è il mio ProductListingModel:

public class ProductListingModels:ItemEntityDataContext 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int DepartmentID { get; set; } 
    public int BrandID { get; set; } 
} 

Si è verificato un errore:

È stato rilevato un riferimento circolare durante la serializzazione di un oggetto di tipo.

Ma se cambio dall'aggiungere l'oggetto "prom" all'aggiunta di qualcosa come stringa o intero, funziona bene. Non so quale problema accada su come aggiungere i miei oggetti.

Qualcuno può mostrarmi la soluzione. Benvenuti a tutte le vostre domande e risposte, grazie mille.

+0

destro; stiamo serializzando 'jr.Data', che è' prom', che è un 'List ' con un singolo oggetto, costituito da 'Id',' Name', 'DepartmentID' e' BrandID' - possiamo per favore vedi 'ProductListingModels' in modo che possiamo vedere quali sono i tipi qui e cosa altro definisce? –

+0

Grazie. ora l'ho aggiunto. – Nothing

+0

ha una particolare classe base? o altri campi/proprietà? –

risposta

17

Ho il sospetto che il problema riguardi riferimenti alla superclasse ItemEntityDataContext che potrebbe contenere altri oggetti. È sempre una buona idea copiare i tuoi dati in una classe viewmodel per passare in vista. Nel tuo caso però basta usare LINQ per selezionare i campi in un nuovo tipo anonimo e serializzare con json. Qualcosa del genere:

jr.Data = prom.Select(p => new 
{ 
    ID = p.ID, 
    Name = p.Name, 
    DepartmentID = p.DepartmentID, 
    BrandID = p.BrandID 
}).ToArray(); 
Problemi correlati