NHibernate.在Newtonsoft.Json.dll中发生LazyInitializationExceptio

本文关键字:LazyInitializationExceptio dll Newtonsoft Json NHibernate | 更新日期: 2023-09-27 18:06:57

我不能序列化然后立即反序列化一个大对象而没有问题。我采纳了以下建议:JSON。. NET和nHibernate延迟加载集合和JSON。NHibernate代理的Net序列化(NH 3.3.2.4000)来获取Json。与我的遗留系统一起工作。尽管尝试了各种建议和组合,我还是没有成功。以下是对我来说最有意义的设置,因为我理解它们。

转换器:

protected override List<MemberInfo> GetSerializableMembers(Type objectType)
{
    if (typeof(INHibernateProxy).IsAssignableFrom(objectType))
    {
        return base.GetSerializableMembers(objectType.BaseType);
    }
    else
    {
        return base.GetSerializableMembers(objectType);
    }
}
主要代码:

    var jsonSerializerSettings = new JsonSerializerSettings
    {
        ContractResolver = new NHibernateContractResolver(),
        PreserveReferencesHandling = PreserveReferencesHandling.All,
        TypeNameHandling = TypeNameHandling.Auto,
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
        ObjectCreationHandling = ObjectCreationHandling.Replace
    };
    string serialisedEnquiry = JsonConvert.SerializeObject(enquiry, Formatting.Indented, jsonSerializerSettings);
    Enquiry enq = JsonConvert.DeserializeObject<Enquiry>(serialisedEnquiry, jsonSerializerSettings);

我有另一个问题开放,这可能是值得注意的:JSON.net null属性尽管你会在最后的评论中看到,我相信我已经解决了它。我只是在等待解决这个问题,以确认另一个是固定的,而不是简单地埋葬/取代这个新的错误。

Fluent NHibernate 1.4.0.0

NHibernate 3.3.1.4000

Netwonsoft。Json 6.0.0.0

编辑:

我的例外是:

类型的未处理异常NHibernate。LazyInitializationException'发生在Newtonsoft.Json.dll

附加信息:Initializing[Unavailable#]-failed to lazy初始化集合,没有会话或会话已关闭

我发现这个隐藏在我的JSON中:

类型:美元"NHibernate.Collection.Generic.PersistentGenericBag 1 [[ComponentModel.Role,ComponentModel]], NHibernate "

我不知道为什么当我有NHibernate转换器,但它给了我一个我可以看看。

NHibernate.在Newtonsoft.Json.dll中发生LazyInitializationExceptio

我从来没有发现到底是什么错了,但我碰巧遇到了这个配置,当我玩它,它的工作。

    jsonSerializerSettings = new JsonSerializerSettings()
    {
        ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
        PreserveReferencesHandling = PreserveReferencesHandling.Objects,
        ContractResolver = new NHibernateContractResolver(),
        NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
        TypeNameHandling = TypeNameHandling.Objects,
        //TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple,
        ObjectCreationHandling = ObjectCreationHandling.Replace
    };

NHibernateContractResolver类:

public class NHibernateContractResolver : DefaultContractResolver
{
    protected override JsonContract CreateContract(Type objectType)
    {
        if (typeof(INHibernateProxy).IsAssignableFrom(objectType))
            return base.CreateContract(objectType.BaseType);
        else
            return base.CreateContract(objectType);
    }
}
相关文章:
  • 没有找到相关文章