提问人:Elena Lampugnani 提问时间:3/9/2021 最后编辑:Elena Lampugnani 更新时间:5/28/2021 访问量:82
NHiberante 无法初始化代理 - 无会话
NHiberante Could not initialize proxy - no Session
问:
这是我的一段代码,我在类中使用 受保护的重写 JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) {
检查我在对象中的属性是否可序列化
if (property.ShouldSerialize == null) {
property.ShouldSerialize = instance => {
try {
PropertyInfo prop = (PropertyInfo)member;
if (prop.CanRead) {
var value = prop.GetValue(instance, null);
if (value != null
&& value.GetType().IsSubclassOfRawGeneric(typeof(NHibernate.Collection.Generic.PersistentGenericBag<>))
&& !((value as NHibernate.Collection.AbstractPersistentCollection).WasInitialized)) {
return false;
}
return true;
}
}
catch (Exception e) {
var m = e.Message;
}
return false;
};
}
支柱。GetValue(实例,null);失败并出现代理错误,我可以在不触及对象数据结构的情况下在此级别进行干预吗?
我尝试将 ReferenceLoopHandling 设置为忽略,但收效甚微。
答:
0赞
Paulo Henrique
5/28/2021
#1
根据您的想法,我能够解决代理对象的问题,如下所示:
public class NHibernateContractResolver : DefaultContractResolver {
protected override JsonContract CreateContract(Type objectType) {
if (typeof(INHibernateProxy).IsAssignableFrom(objectType)) {
return base.CreateObjectContract(objectType);
//return base.CreateContract(objectType.BaseType);
}
return base.CreateContract(objectType);
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) {
JsonProperty property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = instance => {
{
try {
PropertyInfo prop = (PropertyInfo)member;
if (prop.CanRead) {
var value = prop.GetValue(instance, null);
if (value != null
&& value.GetType().Name.Equals("PersistentGenericBag`1")) {
var item = ((IList)value)[0];
}
return true;
}
return false;
} catch (Exception) {
return false;
}
};
};
return property;
}
上一个:物业坐标
评论