WCF枚举,如果我不将成员标记为EnumMember怎么办?

时间:2013-03-01 09:51:52

标签: c# .net wcf enums

[DataContract]
public enum Color
{
    Red,
    Blue
}

[DataContract]
public enum Color1
{
    [EnumMember]
    Red,
    [EnumMember]
    Blue
}

这两个枚举在序列化或客户端处理时会有不同的处理吗?

3 个答案:

答案 0 :(得分:9)

当您将DataContractAttribute应用于枚举时,您必须通过使用EnumMemberAttribute明确说明应该包含该枚举的哪些成员。

因此,在您的情况下,两个枚举将产生两个不同的合同,一个没有成员,另一个有两个成员,RedBlue

如果您不将DataContractAttribute应用于枚举,则该枚举的所有成员都将隐含在合同中。

请参阅here获取解释,主要是Enumeration Member Values和  Notes on Simple Enumerations部分。

答案 1 :(得分:4)

如果您没有使用EnumMember属性标记枚举值,则它不会成为数据的一部分 合同。这意味着它不会出现在wsds / contract / proxies中,并且客户端将无法使用它。

答案 2 :(得分:0)

它不一定会在客户端上被识别为已知类型的成员Color,因为您没有明确说明它是合同的一部分,所以在生成代理时没有理由尊重它。