WCF Web API和实体框架ICollection对象:无法序列化成员...因为它是一个接口

时间:2011-11-30 09:26:24

标签: .net wcf entity-framework serialization wcf-web-api

在WCF Web API Preview 6中,在我的一个服务中,我使用了直接来自EF 4.2的对象,我收到了以下错误:

  

无法序列化成员DataAccess.SqlServer.Resort.AccommProperties   类型   System.Collections.Generic.ICollection`1 [DataAccess.SqlServer.AccommProperty,   DataAccess,版本= 1.0.4350.30311,文化=中立,   PublicKeyToken = null]]因为它是一个接口。

这是我服务的代码:

   [WebGet]
    public HttpResponseMessage<IQueryable<DataAccess.SqlServer.Resort>> GetAll() {

        var resorts = _resortRepo.GetAll(
                ApprovalStatus.Approved
        );

        var resortsResponse =
            new HttpResponseMessage<IQueryable<DataAccess.SqlServer.Resort>>(resorts);
        resortsResponse.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddHours(6));
        return resortsResponse;

    }

以下是我试图在上面公开的度假村课程:

  public partial class Resort
    {
        public Resort()
        {
            this.AccommProperties = new HashSet<AccommProperty>();
            this.ResortDetails = new HashSet<ResortDetail>();
        }

        public int ResortID { get; set; }
        public int DestinationID { get; set; }
        public System.Guid ResortGUID { get; set; }
        public Nullable<int> SecondaryID { get; set; }
        public string ResortName { get; set; }
        public Nullable<bool> IsApproved { get; set; }
        public string ResortType { get; set; }

        public virtual ICollection<AccommProperty> AccommProperties { get; set; }
        public virtual Destination Destination { get; set; }
        public virtual ICollection<ResortDetail> ResortDetails { get; set; }
    }

Like the error message says, I can't serialize an interface。但是我应该做什么来做我的所有EF对象呢?

1 个答案:

答案 0 :(得分:0)

您可以使用Web API Contrib中的JSON.NET Formatter并使用TypeNameHandling settings of JSON.NET来使用您的具体类型而不是接口。

更新: 您也可以尝试SharpSerializer