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,我不能改变我的类布局,据我所知。

所以我的问题基本上是:我可以告诉序列化器它应该将其威胁为List吗?或者有一个通用的集合类来序列化标签,而不会让nhibernate生气?或者其他有用的方法?

Webservice Serialize IEnumerable Property

不完全是你的问题的答案,但也许是你的问题的答案:)

跨进程边界发送实体不是一个很好的主意。相反,您应该将您的实体投影到dto并发送它们。

如果你在服务契约中公开你的实体结构,那么你的实体就会耦合到你服务的每个消费者(Bad)。如果你用简单的dto定义服务契约,消费者将只依赖于它们,而不依赖于你的实体(很好)。

实体到dto的投影也可以自动完成(使用automapper)。

还可以避免一些与延迟加载实体相关的其他问题。

如果你仍然想通过网络发送实体,也许你可以将你的IEnumerable属性标记为不可序列化的,并使用另一个数组类型的属性,只返回IEnumerable property . toarray(),并且不要在NHibernate中映射数组属性