2013-01-23 48 views
4

我用枚举作为标志,并希望“或”它,但总是遇到错误:WCF枚举问题:不能“或”枚举值

枚举值“3”是类型“无效Common.EventType '并且不能被序列化。确保必要的枚举值都存在并且都标有EnumMemberAttribute属性,如果该类型具有DataContractAttribute属性

代码:

[DataContract] 
public enum EventType 
{ 
    [EnumMember] 
    Event1 = 1, 
    [EnumMember] 
    Event2 = 2, 
    [EnumMember] 
    Event3 = 4, 
    [EnumMember] 
    AllEvents = Event1 | Event2 | Event3 
} 

MyContractClient代理=新MyContractClient(上下文);

proxy.Subscribe(EventType.Event1 | EventType.Event2);

预先感谢您

+0

添加['FlagsAttribute'(http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx)使用位运算('& '和'|')枚举类型。虽然,我不确定这是否会纠正给定的错误.. – 2013-01-23 07:51:15

回答

3

您需要添加[国旗]属性在WCF发送标志。

Enumeration Types in Data Contracts

[DataContract][Flags] 
public enum EventType 
{ 
    [EnumMember] 
    Event1 = 1, 
    [EnumMember] 
    Event2 = 2, 
    [EnumMember] 
    Event3 = 4, 
    [EnumMember] 
    AllEvents = Event1 | Event2 | Event3 
} 
2

当我有这个问题:

... and cannot be serialized. Ensure that the necessary enum values are present 
and are marked with EnumMemberAttribute attribute if the type has 
DataContractAttribute attribute 

我发现我不小心被发送枚举在WCF代理作为INT,而不是实际的枚举值。

在我的情况

bad: request.MyEnum = 1 
good: request.MyEnum = MyActualEnum.Number1