System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: A circular reference was detected while serializing an object of type projectnetwork.Models.Branch.
at System.Xml.Serialization.XmlSerializationWriter.WriteStartElement(String name, String ns, Object o, Boolean writePrefixed, XmlSerializerNamespaces xmlns)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write7_Branch(String n, String ns, Branch o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_Company(String n, String ns, Company o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write7_Branch(String n, String ns, Branch o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write8_Branch(Object o)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue)
at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
Несколько часов назад и до сих пор я не мог решить эту проблему و Я очень устал, и это последний шанс, прежде чем я сойду с ума :) я могу найти кого-то, кто решил эту проблему? то, что я пытаюсь сделать, это вернуть объект ветви типа, который является дочерним элементом, включая объект его родителя, который является компанией.
Класс отделения
public partial class Branch { public Branch() { this.Customers = new List<Customer>(); } public int BranchID { get; set; } public int CompanyID { get; set; } public string BranchName { get; set; } public string BranchShortName { get; set; } public string BranchAddress { get; set; } public string BranchPhone { get; set; } public string BranchEmail { get; set; } public string BranchFax { get; set; } public Nullable<float> BranchLimit { get; set; } public bool RecordState { get; set; } public virtual Company Company { get; set; } }
Класс компании
public partial class Company { public Company() { this.Branches = new List<Branch>(); } public int CompanyID { get; set; } public string CompanyName { get; set; } public string CompanyShortName { get; set; } public string CompanyAddress { get; set; } public string CompanyPhone { get; set; } public string CompanyEmail { get; set; } public string CompanyFax { get; set; } public bool RecordState { get; set; } public virtual List<Branch> Branches { get; set; } }
Класс NewDBContext
using System.Data.Entity; using System.Data.Entity.Infrastructure; using projectnetwork.Models.Mapping; namespace projectnetwork.Models { public partial class NewDBContext : DbContext { static NewDBContext() { Database.SetInitializer<NewDBContext>(null); } public NewDBContext() : base("Name=NewDBContext") { this.Configuration.LazyLoadingEnabled = false; this.Configuration.ProxyCreationEnabled = false; } public DbSet<Branch> Branches { get; set; } public DbSet<Company> Companies { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new BranchMap()); modelBuilder.Configurations.Add(new CompanyMap()); } } }
Метод вызова
[WebMethod] public Branch getAllCustomers() { Branch br = null; using (var db = new NewDBContext()) { br = db.Branches .Where(d => d.CompanyID == 1) .Include(c => c.Company) .FirstOrDefault<Branch>(); return br; }
Извините за мой плохой английский
Microsoft.Xml.Serialization
, который упоминается в трассировке стека. 11.03.2014