Можно ли определить использование битов в DataContract службы WCF?
У меня есть программа на C++ с типичным режимом
int
который использует битовую маску. Эта битовая маска определяется в перечислении следующим образом:
enum EModeEntryPoint
{
// Mode
entryPointNone =0x00,
entryPointNormal =0x01,
entryPointExistingAddress =0x02,
entryPointNewAddress =0x04,
entryPointNewAndExisting =0x06, // Same as |entryPointNewAddress
entryPointOnlyNewTickets =0x08, // Only in combination with entryPointNewAddress
};
Когда я использую перечисление в такой службе C# WCF
[DataContractAttribute]
public enum ModeEntryPoint
{
// Mode
[EnumMember] None =0x00,
[EnumMember] Normal =0x01,
[EnumMember] ExistingAddress =0x02,
[EnumMember] NewAddress =0x04,
[EnumMember] NewAndExisting =0x06, // Same as |entryPointNewAddress
[EnumMember] OnlyNewTickets =0x08, // Only in combination with entryPointNewAddress
};
Я вижу, что значения, которые я здесь определяю, не используются. Я вижу, что такие перечисления всегда "перенумеровываются".
Можно ли где-нибудь определить такое битовое использование в контракте?
Мне не нравится создание поля типа bool для каждого бита. Также он раздувает блок данных.
1 ответ
Ключевое слово [Flags] - это решение.
[DataContractAttribute][Flags]
public enum ModeEntryPoint
{
// Mode
[EnumMember] None = 0x00,
[EnumMember] Normal = 0x01,
[EnumMember] ExistingAddress = 0x02,
[EnumMember] NewAddress = 0x04,
[EnumMember]
NewAndExisting = ExistingAddress| NewAddress,
[EnumMember] OnlyNewTickets = 0x08,
};
Это позволяет клиенту WCF деокифицировать определенные поля этого типа.