属性を追加することにより、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"
]
}
JsonPropertyAttribute.ItemConverterType
プロパティを使用する必要があります。
class Example2
{
[JsonProperty (ItemConverterType = typeof(StringEnumConverter))]
public IList<Size> Sizes { get; set; }
}
すべての列挙型を文字列にシリアル化するために、これをWebアプリのスタートアップコードに含めています(列挙型の名前を値に渡すことを好み、より堅牢にしています)。
私は列挙型のリストでそれを試したことがないので、それをどうするかわかりません-試してみる価値があるかもしれません。
var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter { CamelCaseText = true });