Объекты WCF Web API и Entity Framework ICollection: Невозможно сериализовать элемент ..., потому что это интерфейс - PullRequest
0 голосов
/ 30 ноября 2011

В WCF Web API Preview 6 внутри одного из моих сервисов я использовал объект, который напрямую взят из EF 4.2, и получил следующую ошибку:

Невозможно сериализовать член DataAccess.SqlServer.Resort.Размещение свойств типа System.Collections.Generic.ICollection`1 [[DataAccess.SqlServer.AccommProperty, DataAccess, Version = 1.0.4350.30311, Culture = нейтральный, 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;

    }

Ниже приведен класс Resort, который я пытаюсь раскрыть выше:

  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; }
    }

Как в сообщении об ошибке сказаноЯ не могу сериализовать интерфейс .Но что я должен делать все мои объекты EF?

1 Ответ

0 голосов
/ 30 ноября 2011

Вы можете использовать JSON.NET Formatter из Веб-API Contrib и использовать настройки TypeNameHandling в JSON.NET для использования ваших конкретных типов вместо интерфейсов.

Обновление: Вы также можете попробовать SharpSerializer .

...