11

sto ottenendo l'errore:contiene cicli e non può essere serializzato se il monitoraggio di riferimento è disattivata, json.net e WebAPI

Object graph for type 'System.Collections.Generic.List`1[[Proj.Model.Prom, Proj.Model, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' contains cycles and cannot be 
serialized if reference tracking is disabled. 

lettura di questo, sembra essere il serializzatore, ma sostiene di Json.Net essere la soluzione e ho letto WebApi e Framework 4.5 ce l'ha per impostazione predefinita. Quindi arriva di default? In tal caso, perché sto ancora ricevendo quell'errore?

Grazie! Guillermo.

EDIT: Aggiunta di codice

using System; 
using System.Collections.Generic; 
using System.Data.Spatial; 

namespace Proj.Model 
{ 
    public class Prom 
    { 
     public Prom() 
     { 
      this.Stores = new List<Store>(); 
      this.Branches = new List<Branch>(); 
      this.Products = new List<Product>(); 
     } 

     public int Id { get; set; } 
     public string Name { get; set; } 
     public DbGeography Location { get; set; } 
     public string Latitude { get; set; } 
     public string Longitude { get; set; } 
     public int StateId { get; set; } 
     public int CategoryId { get; set; } 

     public virtual ICollection<Store> Stores { get; set; } 
     public virtual ICollection<Branch> Branches { get; set; } 
     public virtual ICollection<Product> Products { get; set; } 

     public virtual Category Category { get; set; } 
     public virtual State State { get; set; } 

    } 
} 

using System; 
using System.Collections.Generic; 

namespace Proj.Model 
{ 
    public class Category 
    { 
     public Category() 
     { 
      this.Proms = new List<Prom>(); 
     } 

     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 

     public virtual ICollection<Prom> Proms { get; set; } 
    } 
} 

poi eseguire qualcosa di simile restituisce l'errore

public IEnumerable<Category> GetList(int estadoId, string idTiposTarjetasList) 
{ 
    var ids = "1,2,3,4".Split(','); 
    var intIds = ids.Select(int.Parse); 

    var Categories = Uow.Categorias.GetAllIncluding(c => c.Proms).ToList(); 
    foreach (var category in Categories) 
    { 
     var proms = category.Proms.Where(p => intIds.Contains(p.Id) && p.StateId == stateId).ToList(); 
     category.Proms = proms; 
    } 
    return Categories 
} 
+0

ti vedi lo stesso problema quando si disattiva proxy? (http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbcontextconfiguration.proxycreationenabled(v=VS.103).aspx) – Pawel

risposta

8

Per impostazione predefinita, WebAPI impostare il 'PreserveReferencesHandling' su Nessuno.

È possibile configurare il Json.NET SerializerSettings in WebApiConfig.cs:

config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = 
    Newtonsoft.Json.PreserveReferencesHandling.All; 
+1

Aggiunto che ma sto ancora ricevendo lo stesso errore – polonskyg

+0

Puoi condividere la tua classe Proj.Model.Prom? –

+0

Aggiunto il codice alla domanda originale. – polonskyg

3

Di seguito mi ha aiutato:

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None; 
Problemi correlati