Erreur lors de l'utilisation Protobuf-Net avec des drapeaux ENUM
-
18-09-2019 - |
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
Où 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?
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.