Имя перечисления во внутреннем классе меняется через WCF-сервис

У меня есть класс Actions с Enum в нем

[DataContract]
public class Actions
{
    [DataContract]
    public enum MailDirectLinkContent
    {
        [EnumMember]
        [DescriptionAttribute("Second account holder")]
        SecondAccountHolder = 0,

        [EnumMember]
        [DescriptionAttribute("Legal representative")]
        LegalRepresentative = 1,

        [EnumMember]
        [DescriptionAttribute("Authorized representative")]
        AuthorizedRepresentative = 2
    }
}

В моем wcf-сервисе у меня есть метод

[OperationContract]
void DoActionMailDirectLinkContent(string toAddress, Actions.MailDirectLinkContent mailDirectLinkContent);

Когда я хочу использовать этот Enum в своем веб-клиенте, он выглядит так:

var myValue = ActionsMailDirectLinkContent.AuthorizedRepresentative;

(точка между именем класса и именем перечисления исчезает)

Я полагаю, что этому поведению есть достойное объяснение, но я не смог его найти.

ОБНОВЛЕНИЕ: я убрал Enum из класса и поместил его во вложенную папку, чтобы они по-прежнему были сгруппированы. Причиной этого изменения является другая проблема, с которой я столкнулся и смог решить это таким образом.


person Koen    schedule 05.08.2011    source источник


Ответы (2)


WCF создает собственные имена для типов, которые вы возвращаете из своих методов веб-службы. Обычно он пытается назвать вещи на основе их локальных имен, но я предполагаю, что он не может на самом деле "пространствовать имена" типов, поэтому тип не может включать в себя . внутри него. Поэтому WCF делает все возможное, чтобы создать для своей службы тип перечисления с описательным именем, но вписывающийся в схему SOAP (или любую другую привязку, которую вы используете).

person StriplingWarrior    schedule 05.08.2011

Правила сериализации отличаются от правил C#, вы не можете ожидать, что все функции C# будут поддерживаться.

Он не может работать с вложенными типами, поэтому создает для них плоские имена.

Вы также не можете перегружать методы в OperationContract.

person Henk Holterman    schedule 05.08.2011