2016-04-12 14 views
1

私はいくつかのC#クラスをREST API用のJSON形式に変換する必要があるソリューションを持っています。私はenumを使用して、列挙型で十分であるときに値を渡す文字列を覚えておく必要がないようにしています。Json.netで列挙型のリストをシリアライズ

このため、引数の1つは列挙型のリストです。私は既にJsonConverterを使って書かれたクラスを持っているので、私は単純な列挙型なので、このリストの列挙型をWriteJsonメソッドに渡すだけで、リストのコンポーネントをどこかで自動的に処理すると思った。残念ながら、これはそうではありません。私WriteJson方法で、私は次のようしている:私はSuiteTypeにキャストしようとすると、

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { 
    var e = (SuiteType) value; 
    switch (e) { 
    case SuiteType.Full: 
     writer.WriteValue("complete"); 
     break; 
    case SuiteType.Partial: 
     writer.WriteValue("partial"); 
     break; 
    } 
} 

をこれは、インバウンド値が実際にSuiteTypeの一覧ではないという理由だけで、もちろん悪いキャストに関するエラーを与えますスイートタイプ。これを念頭に置いて、私はこのカスタム変換をどのように扱うことができますか?(エニューム名とその列挙型のコレクションから変換している間に出力する文字列またはint値の間には常に1:1ではないからです)

答えて

1

Ofもちろん、できるだけ早く私は、答えは私に起こったことを掲示などとして、クラスオブジェクトのListプロパティをマークするのではなく:。そこからJsonConverterを削除しての一番上に置き、

[JsonProperty("types")] 
[JsonConverter(typeof(SuiteTypeConverter))] 
public List<SuiteType> Types { get;set;} 

代わりに

[JsonConverter(typeof(SuiteTypeConverter))] 
public enum SuiteType { 
... 
} 

このような列挙型の定義は次のとおりです。それはうまく動作します。