如何通过web服务获取NHibernate实体列表

如何通过web服务获取NHibernate实体列表,nhibernate,service,xml-serialization,entity,Nhibernate,Service,Xml Serialization,Entity,我的网络服务是: [WebMethod] public List<Activity> ActivityInf() { List<Activity> operationActivities = (List<Activity>)operationActivityCtrl.Result; return operationActivities; } [WebMethod] 公共列表活动inf() { List operat

我的网络服务是:

[WebMethod]        
public List<Activity> ActivityInf()
{
       List<Activity> operationActivities = (List<Activity>)operationActivityCtrl.Result;
       return operationActivities;
}
[WebMethod]
公共列表活动inf()
{
List operationActivities=(List)operationActivityCtrl.Result;
返回操作活动;
}
事实上,当我更改列表时,我看到了操作活动。但是当我运行它时,我得到了一些错误

“/”应用程序中出现服务器错误。 无法序列化System.Collections.Generic.IList`1[[Test.Core.Model.DS.Model,Test.Core.Model,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]类型的成员Test.Core.Model.DS.Act.PCCustomerList,因为它是一个接口

描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.NotSupportedException:无法序列化System.Collections.Generic.IList`1[[Test.Core.Model.DS.PCU,Test.Core.Model,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]类型的成员Test.Core.Model.DS.Act.PCCustomerList,因为它是一个接口

源错误:


在执行当前web请求期间生成了未经处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别

从异常情况看,活动对象似乎包含不可序列化的属性(不可序列化的IList)。通常,当您需要通过WCFweb服务传输NHibernate实体时,实际上并不传输实体,而是使用DTO


DTO比仅包含需要传递的信息的实体更简单,而不是包含复杂对象图的整个NHibernate实体。它们还将包含列表的具体实现,而不是IList。基本上,它们是可序列化的。如果搜索DTO和NHibernate,将有更多关于此主题的信息。

活动对象中可能有仍然附加到NHibernate代理的属性。避免这种情况的快速方法是使用Eager[Not.LazyLoad()]加载。如果您使用的是Fluent NHibernate,则如下所示:

References<Activity>(x => x.ActivityType, "ActivityType_Id")
    .Nullable()
    .Column("ActivityType_Id")
    .Not.LazyLoad()
    .ForeignKey("Id");
将给定实体对象转换为相应的Dto并序列化它的引用,如:

var activityDto = Mapper.Map<Activity, Dtos.Activity>(activity);
return JsonSerializer.SerializeToString<Dtos.Activity>(activityDto);
var activityDto=Mapper.Map(活动);
返回JsonSerializer.SerializeToString(activityDto);

但我不使用Fluent NHibernate。你有正常的NHibernate的解决方案吗?