内部类中的枚举名称通过WCF-service更改

本文关键字:WCF-service 更改 枚举 内部类 | 更新日期: 2023-09-27 18:04:50

我有一个action类,里面有一个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-service中我有一个方法

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

当我想在我的web客户端中使用这个Enum时,它出现如下:

var myValue = ActionsMailDirectLinkContent.AuthorizedRepresentative;

(类名和枚举名之间的点消失)

我想对这种行为有一个合理的解释,但是我找不到。

更新:我将Enum从类中取出并将其放在子文件夹中,以便它们仍然分组在一起。这个变化的原因是我遇到的另一个问题,我可以用这种方式解决它。

内部类中的枚举名称通过WCF-service更改

WCF为您从web服务方法返回的类型生成自己的名称。它通常尝试根据本地名称命名事物,但我猜它不能真正"命名空间"类型,因此类型不能包含.。因此,WCF正在尽最大努力为其服务创建一个enum类型,该类型具有描述性名称,但适合SOAP模式(或您正在使用的任何绑定)。

序列化与c#有不同的规则,你不能期望每个c#特性都被支持。

它不能处理嵌套类型,所以它为这些类型构造了一个扁平的名称。

你也不能在OperationContract中重载方法。