NHibernate代理的JSON.Net序列化(NH 3.3.2.4000)

Stu*_*lor 6 nhibernate proxy json.net

仍然很难让Json.Net和NHibernate一起玩得很好。即,让Json.NET序列化代理的NHibernate对象。

我遵循了这里的建议,无论是接受的答案还是建议,都没有问题。

上述解决方案的最大问题是,现代版本的NHibernate似乎正在使用该INHibernateProxyProxy接口创建代理(而不是INHibernateProxy?还有其他人可以确认吗?),在我的案例中,其基类为NHibernate.Proxy.DynamicProxy.ProxyDummy,因此不揭示任何底层内容当我尝试使用自定义scontract解析器创建Json合同时,对象:

    protected override JsonContract CreateContract(Type objectType)
    {
        if (typeof(NHibernate.Proxy.INHibernateProxy).IsAssignableFrom(objectType))
            return base.CreateContract(objectType.BaseType);
        else
            return base.CreateContract(objectType);
    }
Run Code Online (Sandbox Code Playgroud)

有人对如何INHibernateProxyProxy有效处理有任何建议吗?

Stu*_*lor 1

找到了。原始类型可通过 获得.GetInterfaces(),即:

    protected override JsonContract CreateContract(Type objectType)
    {
        if (typeof (INHibernateProxy).IsAssignableFrom(objectType))
        {
            var oType = objectType.GetInterfaces().FirstOrDefault(i => i.FullName.StartsWith("Your.Domain.Namespace"));
            return oType != null ? base.CreateContract(oType) : base.CreateContract(objectType.BaseType);
        }
        return base.CreateContract(objectType);
    }
Run Code Online (Sandbox Code Playgroud)