WCF枚举问题:无法“或”枚举值

4
我将枚举用作标志并希望对其进行“或”操作,但总是遇到错误:
枚举值“3”对于类型“Common.EventType”无效,无法序列化。确保所需的枚举值存在,并且如果类型具有DataContractAttribute属性,则已用EnumMemberAttribute属性标记。
代码:
[DataContract]
public enum EventType
{
    [EnumMember]
    Event1 = 1,
    [EnumMember]
    Event2 = 2,
    [EnumMember]
    Event3 = 4,
    [EnumMember]
    AllEvents = Event1 | Event2 | Event3
}

我的合同客户端代理 = new MyContractClient(context);

代理.订阅(事件类型.事件1 | 事件类型.事件2);

预先感谢您。


添加FlagsAttribute以在枚举类型上使用位运算(&|)。虽然,我不确定这是否会修复给定的错误.. - user166390
2个回答

4
你需要在WCF中添加[Flags]属性来发送标志。 数据合同中的枚举类型
[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

我发现我错误地将枚举值作为int类型而不是实际的枚举值发送到WCF代理。

在我的情况下

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接