enthält Zyklen und kann nicht serialisiert werden, wenn Referenz-Verfolgung deaktiviert ist, json.net und webapi
Ich bin immer der Fehler:
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.
Darüber zu Lesen, scheint zu sein, serializer, aber Json.Net behauptet die Lösung zu sein und ich habe gelesen, WebApi und Framework 4.5 hat es standardmäßig. So kommt es standardmäßig? Wenn dem so ist, Warum ich bin immer noch der Fehler?
Dank! Guillermo.
BEARBEITEN: Hinzufügen von code
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; }
}
}
Dann läuft so etwas wie dieses gibt den Fehler zurück
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
}
tun Sie das gleiche problem sehen, wenn Sie Proxys deaktivieren? (msdn.microsoft.com/en-us/library/...)
InformationsquelleAutor polonskyg | 2012-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig, WebApi 'PreserveReferencesHandling" zu Keiner.
Konfigurieren Sie die Json.NET SerializerSettings in der WebApiConfig.cs:
Können Sie teilen Sie Ihre Proj.Modell.Prom-Klasse?
Den code Hinzugefügt, um die ursprüngliche Frage.
Eigentlich denke ich nicht, dass die Ausnahme ausgelöst wird, durch die Json.NET serializer auf alle. Wie es aussieht wird das ausgelöst durch DataContractJsonSerializer/DataContractSerializer. Können Sie überprüfen, um zu sehen, ob (1) Ihre WebAPI nutzt Json.NET (z.B. config.Formatierer.JsonFormatter.UseDataContractJsonSerializer nicht explizit auf true gesetzt ist) und (2) Ihrem client-code anfordert, JSON.
gibt es eine Möglichkeit zu tun, passen Sie die datacontractserializer mithilfe der fluent-api anstelle von Attributen?
InformationsquelleAutor Maggie Ying
Folgendes hat mir geholfen:
InformationsquelleAutor Anks