Using enums in WCF Data Services

Я пытаюсь вручную создать службу данных WCF, используя модель данных POCO, и не могу понять, как правильно выставлять значения enum . Предполагая простую модель, подобную следующей:

public class Order
{
   public int ID {get; set;}
   public string Description {get; set;}
   public OrderStatus Status {get; set;}
}

public enum OrderStatus
{
   New,
   InProcess,
   Complete
}

Как предоставить ценную информацию в свойстве OrderStatus через службу данных OData WCF?

Если вы ничего не делаете, служба данных генерирует ошибку времени выполнения (enum является недействительным свойством). Единственный ответ, который я видел, что, по крайней мере, устраняет ошибку, это пометить свойство enum как игнорируемое, например:

[System.Data.Services.IgnoreProperties("Status")]
public class Order ...

Это работает, но заставляет вас «опускать» ценную информацию из сервиса слой. Существуют ли другие варианты работы со значениями перечисления в службах данных WCF?

РЕДАКТИРОВАТЬ: Обратите внимание, что это Службы данных WCF (он же Astoria). Это не необработанные сервисы WCF, и в этом случае ответы более ясны.

17
задан John Saunders 25 August 2010 в 21:33
поделиться

3 ответа

Вы должны сделать enum контрактом данных.

См. пример здесь: http://consultingblogs.emc.com/merrickchaffer/archive/2007/04/03/Passing-Enum-values-into-WCF-Service-operations.aspx

[Редактировать] По-видимому, это не всегда так, как показано здесь: Совместное использование Enum со службой WCF

0
ответ дан 30 November 2019 в 12:50
поделиться

Возможно, мы можем "обмануть" его с помощью следующего обходного пути:

[System.Data.Services.IgnoreProperties("Status")]
public class Order
{
   public int ID {get; set;}
   public string Description {get; set;}
   public OrderStatus Status {get; set;}
   public int StatusValue
   {
      get
      {
           return (int)this.Status;
      }
      set
      {
          // Add validation here
          this.Status = (OrderStatus)value;
      } 
   }
}

public enum OrderStatus
{
   New,
   InProcess,
   Complete
}
5
ответ дан 30 November 2019 в 12:50
поделиться

Предполагая, что сериализация Datacontratt, как так:

[DataContract]
public class Order
{
   [DataMember]
   public int ID {get; set;}
   [DataMember]
   public string Description {get; set;}
   [DataMember]
   public OrderStatus Status {get; set;}
}

[DataContract]
public enum OrderStatus
{
    [EnumMember]
    New,
    [EnumMember]
    InProcess,
    [EnumMember]   
    Complete
}
2
ответ дан 30 November 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: