gpt4 book ai didi

c# - 带有 Web 服务的标志

转载 作者:太空狗 更新时间:2023-10-29 21:52:35 25 4
gpt4 key购买 nike

我在 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)

我如何正确地通过网络服务提供标志?

编辑:

根据 this article 可能无法完成我想做的事情。伊万·克里维亚科夫 (Ivan Krivyakov) 表示

Imperfect Transparency of Enums

It turns out that enums are not as transparent as we'd like them to be. There are three sticky issues:

  1. If server-side code declares an enum and assigns specific numeric values to its members, these values will not be visible to the client.
  2. If server-side code declares a [Flags] enum with "compound" mask values (as in White = Red|Green|Blue), it is not properly reflected on the client side.
  3. If server or client transmits an "illegal" value which is outside of the scope of the enum, it causes an exception in XML de-serializer on the other side.

所以我想知道这是否只是一个限制并且是不可能的。

最佳答案

我对此进行了广泛的研究,发现无法通过 Web 服务序列化枚举常量。请注意,要实现您的目标,您不需要枚举 None 或 Full。这两个枚举可以用读/写组合来隐含:

如果您的 AccessLevels = Read | 您可以假定完全访问权限写 如果您的 AccessLevels = 0 [无],则没有

您的枚举将如下所示:

[Serializable,Flags]
public enum AccessLevels
{
Read = 1,
Write = 2
}

关于c# - 带有 Web 服务的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/505617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com