Можно ли определить использование битов в 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 деокифицировать определенные поля этого типа.

Другие вопросы по тегам