Question

Lors de l'utilisation Protobuf-Net et sérialisation une propriété ENUM, où le ENUM est réglé sur [FlagsAttribute], j'ai reçu le message d'erreur suivant lors de la sérialisation une valeur ENUM composée de plusieurs drapeaux.

L'erreur est: La valeur (MyEnum.MyValue) n'a pas de représentation de fil pour propriété MyProperty

MyEnum est:

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

et

MyProperty = MyEnum.MyValue2 | MyEnum.MyValue4;

Il semble être un bogue dans protobuf-net?

Était-ce utile?

La solution

Mise à jour: il est maintenant fixé dans R274 ; vous utilisez:

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

Finalement, le fil de tampons de protocole format ne fournit pas de possibilités de [] Drapeaux énumérations - il applique les valeurs enum contre l'ensemble discret. Je pourrais facilement permettre à ce enugh, mais:

  • Je devrais probablement désactiver les correspondances enum dans ce cas, ou faire beaucoup de BIT- laid travail correspondant
  • il ne serait pas strictement compatible

Un moyen plus facile de le faire peut-être faire une cale dans votre code:

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

L'autre alternative serait d'ajouter un drapeau qui fonctionne comme ci-dessus sur votre nom; traiter comme un int au lieu d'une énumération.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top