Имя enum во внутреннем классе меняется через WCF-сервис - PullRequest
0 голосов
/ 05 августа 2011

У меня есть класс 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 из класса и поместил его в подпапку, чтобы они все еще были сгруппированы вместе.Причина этого изменения - другая проблема Я столкнулся и смог решить ее таким образом.

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

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

1 голос
/ 05 августа 2011

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

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

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

...