在 WebApi 中序列化多个枚举值
Serializing Multiple Enum Values in WebApi
如果我有这样的枚举:
[Flags]
public enum EyeColor {
All = 1,
Brown = 2,
Blue = 4,
Hazel = 8,
Green = 16
}
然后 return 一个 JSON 这样的结果:
jsonBody.EyeColor = EyeColor.Brown | EyeColor.Blue;
我在客户端的 jsonBody 中看到以下内容:
"Brown, Blue"
但是,如果我通过 EyeColor 属性 将上述字符串发送到 WebAPI:
var eyeColor = "Brown, Blue"
var query = '?Index=1&EyeColor=` + eyeColor;
// send json GET request and use [FromUri] to extract
服务器端,我得到:
dto.EyeColor: 0
虽然如果我这样做:
var eyeColor = "All"
var query = '?Index=1&EyeColor=` + eyeColor;
// send json GET request and use [FromUri] to extract
我明白了
dto.EyeColor: All
所以我想知道的是 - 如果我不仅要从 WebApi 检索字符串序列化的枚举,还要发送一个字符串来表示已选择的多个枚举(并反序列化为多个枚举) ), 我需要做什么?
我的Global.asax:
JsonSerializerSettings jSettings = new JsonSerializerSettings();
jSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = jSettings;
GlobalConfiguration.Configuration
.Formatters
.JsonFormatter
.SerializerSettings
.ContractResolver = new CamelCasePropertyNamesContractResolver();
我是个白痴。
"Brown,+Blue"
是所有需要的。
如果我有这样的枚举:
[Flags]
public enum EyeColor {
All = 1,
Brown = 2,
Blue = 4,
Hazel = 8,
Green = 16
}
然后 return 一个 JSON 这样的结果:
jsonBody.EyeColor = EyeColor.Brown | EyeColor.Blue;
我在客户端的 jsonBody 中看到以下内容:
"Brown, Blue"
但是,如果我通过 EyeColor 属性 将上述字符串发送到 WebAPI:
var eyeColor = "Brown, Blue"
var query = '?Index=1&EyeColor=` + eyeColor;
// send json GET request and use [FromUri] to extract
服务器端,我得到:
dto.EyeColor: 0
虽然如果我这样做:
var eyeColor = "All"
var query = '?Index=1&EyeColor=` + eyeColor;
// send json GET request and use [FromUri] to extract
我明白了
dto.EyeColor: All
所以我想知道的是 - 如果我不仅要从 WebApi 检索字符串序列化的枚举,还要发送一个字符串来表示已选择的多个枚举(并反序列化为多个枚举) ), 我需要做什么?
我的Global.asax:
JsonSerializerSettings jSettings = new JsonSerializerSettings();
jSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = jSettings;
GlobalConfiguration.Configuration
.Formatters
.JsonFormatter
.SerializerSettings
.ContractResolver = new CamelCasePropertyNamesContractResolver();
我是个白痴。
"Brown,+Blue"
是所有需要的。