2016-07-14 16 views
1

を使用して、私は、列挙型を持っています。その列挙型の値を任意の整数にシリアル化する最適なソリューションは何ですか?理想的には私は以下のスニペットのような何かをしたいと私は多分そのための組み込みソリューションがあるかどうかを知りたい:列挙値Newtonsoft.Json

public enum IdleDelayBreakMode 
{ 
    [JsonValue(100)] 
    Repeat,    // When serializing will be converted to 100 

    [JsonValue(200)] 
    ShowNext   // When serializing will be converted to 200 
} 
+0

値を設定するだけですか? 'Repeat = 100'と' ShowNext = 200'があります。 – juharr

+0

列挙型の定義方法とは異なる列挙型を直列化したいですか? –

+0

JsonConverterを継承するクラスを作成し、この属性をenum [JsonConverter(typeof(MyConverter))]に適用する必要があります。 – Mangist

答えて

1

基礎となる列挙型の値ES(他の回答に示されるように)、あなたは[EnumMember(Value = "Name")]属性を使用して列挙バレスを飾ると名の文字列として別の数値を使用することができます。

[JsonConverter(typeof(StringEnumConverter))] 
[DataContract] 
public enum IdleDelayBreakMode 
{ 
    [EnumMember(Value = "100")] 
    Repeat, 
    [EnumMember(Value = "200")] 
    ShowNext 
} 

あなたはまた、いずれか追加してStringEnumConverterを使用してシリアライズする必要があります。 [JsonConverter(typeof(StringEnumConverter))]を列挙型に直接入力するか、this answerに従ってグローバルに適用します。

[Flags]と同様に動作します。次の両方の値をシリアライズします。

[Flags] 
[DataContract] 
[JsonConverter(typeof(StringEnumConverter))] 
public enum IdleDelayBreakModeFlags 
{ 
    [EnumMember(Value = "100")] 
    Repeat = (1 << 0), 
    [EnumMember(Value = "200")] 
    ShowNext = (1 << 1), 
} 

"100, 200"を生成します。

これらの属性を追加すると、DataContractSerializerとJson.NETはこれらの代替名文字列を使用します。データコントラクトシリアライザの動作に影響を与えたくない場合は、[DataContract]を削除しますが、[EnumMember]の属性は保持してください。

3

あなたはちょうどそのよう列挙値を設定することができます。

public enum IdleDelayBreakMode 
{ 
    Repeat = 100, 
    ShowNext = 200 
} 

Newtonsoft.Jsonは列挙型の値を使用します。属性を設定する必要はありません。このことは、あなたがJSONにそれをシリアル化する必要があるかどうかをシステム全体で一貫される方法、Entity Frameworkのを使用してデータベースに保存など


あなたは整数定数ストレージとして、あなたの列挙型を使用していますか?あなたはint型からそれを継承する場合があります。この場合

だけでなく、直接属性を使用してのあなたの列挙項目の整数値を設定し
public enum IdleDelayBreakMode : int 
3

public enum IdleDelayBreakMode 
{ 
    Repeat = 100, 
    ShowNext = 200 
} 

JSON.Netますそれらは型のプロパティをシリアル化/逆シリアル化する際に整数値を使用しますIdleDelayBreakMode