我有一个位于 Web 服务后面的标志属性枚举,如下所示:
[Serializable,Flags]
public enum AccessLevels
{
None = 0,
Read = 1,
Write = 2,
Full = Read | Write
}
我的问题是我的 Web 服务的使用者没有枚举的原始常量值。生成的代理类客户端具有相当于此的内容:
{
None = 1,
Read = 2,
Write = 4,
Full = 8
}
因此,当消费者检查“读取”访问权限时,即使“testItem”为“完整”,这也是错误的
((testItem & Svc.Read) == Svc.Read)
如何通过 Web 服务正确提供标志?
编辑:
根据这篇文章,可能无法做我想做的事情。伊万·克里维亚科夫说
枚举的不完全透明度
事实证明,枚举并不像我们希望的那样透明。存在三个棘手的问题:
- 如果服务器端代码声明一个枚举并为其成员分配特定的数值,则这些值对客户端将不可见。
- 如果服务器端代码声明了一个带有“复合”掩码值的 [Flags] 枚举(如 White = Red|Green|Blue),则它不会正确反映在客户端。
- 如果服务器或客户端传输超出枚举范围的“非法”值,则会在另一端的 XML 反序列化器中引发异常。
所以我想知道这是否只是一个限制,是不可能的。