4

enum をフラグとして使用し、「or」したいのですが、常にエラーが発生します。

列挙値 '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

実際の列挙値ではなくintとして、誤って WCF プロキシ経由で Enum を送信していたことがわかりました。

私の場合

bad: request.MyEnum = 1
good: request.MyEnum = MyActualEnum.Number1
于 2013-05-22T01:38:32.803 に答える