11

Dostaję błąd:zawiera cykle i nie może być w odcinkach czy śledzenie odniesienia jest wyłączone, a json.net 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. 

czytanie o tym, wydaje się być serializer, ale twierdzi, Json.Net być rozwiązaniem i czytałem, że WebApi i Framework 4.5 mają go domyślnie. Więc przychodzi domyślnie? Jeśli tak, dlaczego wciąż otrzymuję ten błąd?

Dzięki! Guillermo.

EDIT: Dodawanie kodu

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; } 
    } 
} 

Następnie działa coś takiego zwraca błąd

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

widzisz ten sam problem, kiedy wyłączyć proxy? (http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbcontextconfiguration.proxycreationenabled(v=VS.103).aspx) – Pawel

Odpowiedz

8

Domyślnie WebAPI ustawić 'PreserveReferencesHandling' None.

Można skonfigurować Json.NET SerializerSettings w WebApiConfig.cs:

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

Dodałem, że nadal otrzymuję ten sam błąd – polonskyg

+0

Czy możesz udostępnić swoją klasę Proj.Model.Prom? –

+0

Dodano kod do pierwotnego pytania. – polonskyg

3

Poniższa pomógł mi:

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None; 
Powiązane problemy