4

我使用枚举作为标志并想要“或”它,但总是遇到错误:

枚举值“3”对“Common.EventType”类型无效,无法序列化。如果类型具有 DataContractAttribute 属性,请确保存在必要的枚举值并使用 EnumMemberAttribute 属性进行标记

代码:

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

MyContractClient 代理 = new MyContractClient(context);

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

先感谢您

4

2 回答 2

4

您需要添加 [Flags] 属性以通过 WCF 发送标志。

数据协定中的枚举类型

[DataContract][Flags]
public enum EventType
{
  [EnumMember]
  Event1 = 1,
  [EnumMember]
  Event2 = 2,
  [EnumMember]
  Event3 = 4,
  [EnumMember]
  AllEvents = Event1 | Event2 | Event3
}
于 2013-01-23T08:28:51.713 回答
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
于 2013-05-22T01:38:32.803 回答