2011-10-05 77 views
1

我有一个相当棘手的问题,在过去两天里一直困扰着我。Webservice序列化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>)。但是当你打电话给我的webservice时,它不能序列化我的IEnumerable,因为它是一个接口,IList也是这样。因为我使用nhibernate,所以我无法改变我的班级布局,据我所知。

所以我的问题基本上是: 我可以告诉串行器,它应该威胁它作为一个列表?还是有一个通用的集合类,将序列化标签,不会使nhibernate生气?或者其他任何可以工作的东西?

+1

你正在使用什么样的序列化? – svick

回答

2

不完全回答你的问题,但也许回答您的问题:)

跨进程边界发送实体是不是一个很好的主意。您应该将您的实体投影到DTO并发送这些实体。

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

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

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

如果您仍然希望通过线路发送实体,那么您可能会将IEnumerable属性标记为不可序列化,并使用只返回IEnumerable Property.ToArray()的数组类型的另一个属性,而不要在NHibernate中映射数组属性。

相关问题