I have a flag attribute enumeration that is behind a web service as follows:
[Serializable,Flags]
public enum AccessLevels
{
None = 0,
Read = 1,
Write = 2,
Full = Read | Write
}
My problem is the consumer of my web service does not have the original constant values of the enum. The resulting proxy class client side has something that amounts to this:
{
None = 1,
Read = 2,
Write = 4,
Full = 8
}
And thus when the consumer is checking for "Read" access this will be false even when "testItem" is "Full"
((testItem & Svc.Read) == Svc.Read)
How can I properly provide flags over a web service?
EDIT:
According to this article it may not be possible to do what I am looking to do. Ivan Krivyakov states
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:
- If server-side code declares an enum and assigns specific numeric values to its members, these values will not be visible to the client.
- 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.
- 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.
So I wonder if this is just a limitation and is not possible.