如何在WCF数据服务中使用枚举?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我正在尝试使用POCO数据模型手动构建WCF数据服务,但我无法弄清楚如何正确显示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属性标记为忽略,如:

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

这有效,但它迫使你从服务层“省略”有价值的信息。在WCF数据服务中使用枚举值还有其他选项吗?

请注意这是WCF数据服务。这不是原始的WCF服务,在这种情况下,答案更加清晰。

提问于
用户回答回答于

WCF数据服务目前不支持枚举(OData协议也不支持它们)。典型的解决方法是使用字符串和常量值,或者整数和常量值。

用户回答回答于

也许我们可以用下面的方法“欺骗”它:

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

扫码关注云+社区