Webservice Serialize IEnumerable属性

时间:2011-10-05 09:47:09

标签: c# web-services nhibernate serialization ienumerable

我有一个相当棘手的问题,过去两天一直困扰着我。

这是我的班级:

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

所以我的问题基本上是: 我可以告诉Serializer它应该以列表的形式威胁它吗?或者是否有一个通用的集合类将序列化标签,不会让nhibernate生气?还是其他任何有用的东西?

1 个答案:

答案 0 :(得分:2)

不完全是您问题的答案,但可能是您问题的答案:)

跨越流程边界发送实体并不是一个好主意。您可以将您的实体投射到DTO并发送它们。

如果您在服务合同中公开您的实体结构,那么您的实体将耦合到您服务的每个消费者(坏)。如果您在简单的DTO中定义服务合同,消费者将只依赖于它们而不依赖于您的实体(好)。

实体对DTO的投影也​​可以自动完成(使用automapper)。

此外,您还将避免与延迟加载实体相关的其他一些问题。

如果你仍然希望通过网络发送实体,那么你可以将IEnumerable属性标记为不可序列化,并使用只返回IEnumerable Property.ToArray()的数组类型的另一个属性,并且不映射NHibernate中的数组属性。