Serialisieren nHibernate Abfrage zur JSON
Sich In Fluent nHibernate, ich entdeckte einen möglichen Schutzschalter für die Verwendung...
Angesichts der folgenden POCO-code.
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Details Details { get; set; }
}
public class Details
{
public virtual int Id { get; set; }
public virtual IList<Orders> Orders { get; set; }
}
public class CustomerMap : ClassMap<Customer>
{
//perform mapping
}
public class DetailsMap : ClassMap<Details>
{
//perform mapping
}
Ich geladen ASP.NET MVC und versuchten mit Json-Serialisierung.
using System.Web.Script.Serialization;
public static partial class JsonExtensions
{
public static string ToJson(this object item)
{
return new JavaScriptSerializer().Serialize(item);
}
}
Und Siehe, wenn ich an eine Abfrage aus meiner nHibernate Kontext der ToJson
Methode, ich bekam eine Fehlermeldung!
Einen Zirkelbezug wurde erkannt, während der Serialisierung ein Objekt des Typs " System.Reflexion.RuntimeModule'.
Scheint es, um dies zu tun, ob ich ziehen Sie ein einzelnes Objekt oder eine Liste von Objekten, ..oder etwas für diese Angelegenheit. Ich habe sogar versucht die Kennzeichnung meiner Klassen als [Serializable]
mit dem gleichen Ergebnis. Dies geschieht nicht mit der exakt gleichen Klassen mit dem Microsoft Entity Framework Code-Only-Ansatz.
Kann ich nicht Deserialisieren nHibernate DTOs in JSON?
Hinzufügen weiterer code für die Prüfung.
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var customers= session.CreateCriteria(typeof(Customer)).List<Customer>();
foreach (var customer in customers)
{
Console.WriteLine(customer.ToJson());
}
Console.ReadLine();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nur eine Vermutung, aber möchten Sie vielleicht, um zu untersuchen, welche Art es ist, wirklich zu versuchen, zu serialisieren - nHibernate generiert proxies für jeden POCO zur Laufzeit (also es können Dinge tun wie lazy loading von foreign-key-Einrichtungen usw.). Dies kann, warum Sie diese Fehlermeldung bekommen.
Versuchen Sie, den genauen Typ serialisiert werden soll oder vielleicht ein ganz neues Objekt zu serialisieren, das Auffüllen seiner Eigenschaften mit, dass der nHibernate POCO.
BEARBEITEN:
Dies scheint zu sein, viel mehr likley, die Antwort auf Ihre Probleme:
http://www.west-wind.com/WebLog/posts/147218.aspx
Grundsätzlich prüfen alle Ihre POCO ist für alle Zirkelbezüge (z.B. ein Kunde, dass POCO hat einen Auftrag POCO als Eigenschaft während der Bestellung POCO hat eine Liste von Kunden als Eigenschaft)