2009-09-29 8 views
5

でいるProtobufネットを使用しながら、複数のフラグからなる列挙値をシリアル化するとき、私は、次のエラーメッセージを受信しました。エラーいるProtobufネットを使用して列挙は、[FlagsAttribute]に設定されている列挙型プロパティを、直列化しながらフラグ列挙

エラーがある:値(MyEnum.MyValue)プロパティMYPROPERTYためのワイヤ表現は

MyEnumはなかった場合:

[Flags] 
public Enum MyEnum 
{ 
    MyValue = 0, 
    MyValue1 = 1, 
    MyValue2 = 2, 
    MyValue4 = 4, 
    MyValue8 = 8, 
} 

MyProperty = MyEnum.MyValue2 | MyEnum.MyValue4; 

はいるようですprotobuf-netのバグですか?

+0

今r274で修正されました。更新の答えに答えるために時間を割いて –

答えて

4

更新:これは今r274に固定されています。あなたが使用します。最終的には

[ProtoMember(12, DataFormat = DataFormat.TwosComplement)] 
public MyEnum MyValue {get;set;} 

プロトコルバッファワイヤー 形式は、[フラグ]列挙型のための任意の範囲を提供していません - それは 控えめなセットに対して列挙値を適用します。私は簡単にenughこれを許可しますが、可能性:

  • 私はおそらくそれは厳密に互換性がないでしょう。この場合、列挙型のマッピングを無効にする、または醜いbit- マッチング作業
  • の多くを行う必要があるだろう

これを行う簡単な方法は、あなたのコード内のシムを行うにはことがあります

public MyEnum MyValue {get;set;} 
[ProtoMember(12)] 
private int MyValueWire { 
    get {return (int)MyValue;} 
    set {MyValue = (MyEnum)value;} 
} 

他の代替は、あなたの01に上記のような働きフラグを追加することです代わっ;列挙型ではなくint型として扱います。

+0

感謝を参照してください。私は、列挙型はint型として扱われるべきであることを示すためにProtoMember属性にフラグを置く最後の選択肢を好むだろう。 –

+0

ありがとうございました! –

関連する問題