web-dev-qa-db-ja.com

JSON.netを使用して、enumのコンテナーを文字列としてシリアル化します

属性を追加することにより、WebAPIモデルの列挙型フィールドを文字列としてシリアル化できます。

enum Size
{
    Small,
    Medium,
    Large
}

class Example1
{
    [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
    Size Size { get; set; }
}

これにより、このJSONにシリアル化されます。

{
  "Size": "Medium"
}

列挙型のコレクションで同じことをどのように達成できますか?

class Example2
{
    IList<Size> Sizes { get; set; }
}

このJSONにシリアル化したい:

{
  "Sizes":
  [
    "Medium",
    "Large"
  ]
}
46
Jon-Eric

JsonPropertyAttribute.ItemConverterType プロパティを使用する必要があります。

class Example2
{
    [JsonProperty (ItemConverterType = typeof(StringEnumConverter))]
    public IList<Size> Sizes { get; set; }
}
80
Athari

すべての列挙型を文字列にシリアル化するために、これをWebアプリのスタートアップコードに含めています(列挙型の名前を値に渡すことを好み、より堅牢にしています)。

私は列挙型のリストでそれを試したことがないので、それをどうするかわかりません-試してみる価値があるかもしれません。

var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter { CamelCaseText = true });
15
MarcE