Webservice Serialize IEnumerable Property
本文关键字:Property IEnumerable Serialize Webservice | 更新日期: 2023-09-27 18:10:33
我有一个相当棘手的问题,一直困扰了我两天。
这是我的班级:
public class MyClass: BaseEntity<int>
{
//Some other properties here...
public virtual Categorie Categorie { get; set; }
public virtual Bron Bron { get; set; }
public virtual IEnumerable<Label> Labels { get; set; }
}
我被迫使用NHibernate。我完成了映射,IEnumerable
不能是List<T>
(它可以是IList<T>
)但是,当您调用我的web服务时,它不能序列化我的IEnumerable
,因为它是一个接口,对于IList也是如此。因为我使用nhibernate,我不能改变我的类布局,据我所知。
不完全是你的问题的答案,但也许是你的问题的答案:)
跨进程边界发送实体不是一个很好的主意。相反,您应该将您的实体投影到dto并发送它们。
如果你在服务契约中公开你的实体结构,那么你的实体就会耦合到你服务的每个消费者(Bad)。如果你用简单的dto定义服务契约,消费者将只依赖于它们,而不依赖于你的实体(很好)。
实体到dto的投影也可以自动完成(使用automapper)。
还可以避免一些与延迟加载实体相关的其他问题。
如果你仍然想通过网络发送实体,也许你可以将你的IEnumerable属性标记为不可序列化的,并使用另一个数组类型的属性,只返回IEnumerable property . toarray(),并且不要在NHibernate中映射数组属性