Исследуя Fluent nHibernate, я обнаружил потенциальный прерыватель для его использования ...
Учитывая следующий код POCO.
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
}
Я загрузил ASP.NET MVC и попыталсяиспользовать сериализацию Json.
using System.Web.Script.Serialization;
public static partial class JsonExtensions
{
public static string ToJson(this object item)
{
return new JavaScriptSerializer().Serialize(item);
}
}
И Lo, когда я передал запрос из контекста nHibernate в метод ToJson
, я получил ошибку!
Циклическая ссылкабыл обнаружен при сериализации объекта типа 'System.Reflection.RuntimeModule'.
Кажется, это делается, независимо от того, тяну ли я один объект или список объектов ... или что-нибудь еще в этом отношенииЯ даже пытался пометить мои классы как [Serializable]
с тем же результатом.Это не происходит с точно такими же классами, использующими подход Microsoft Entity Framework только для кода.
Могу ли я не десериализовать nHibernate DTO в JSON?
Добавление большего количества кода для проверки. 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();
}
}