如何在全球范围内告诉Json.Net将StringEnumConverter应用于所有的枚举

我想通过json.net将枚举反序列化为string表示,反之亦然。 我可以弄清楚告诉框架应用其StringEnumConverter的唯一方法是注释这样的属性:

 [JsonConverter(typeof(StringEnumConverter))] public virtual MyEnums MyEnum { get; set; } 

然而,在我的使用情况下,全局configurationjson.net会更方便,因此所有枚举都可以使用StringEnumConverter序列化,而不需要额外的注释。

有没有办法这样做,例如在自定义JsonSerializerSettings的帮助下?

StringEnumConverter添加到JsonSerializerSettings转换器集合。

文档: 使用JsonConverters进行序列化


如果你想让序列化程序使用camelCasing,你也可以这样设置:

 SerializerSettings.Converters.Add( new StringEnumConverter { CamelCaseText = true }); 

这将序列SomeValue someValue

其他的答案适用于ASP.NET,但是如果你想设置这些设置,通常在任何上下文中调用JsonConvert,你可以这样做:

 JsonConvert.DefaultSettings = (() => { var settings = new JsonSerializerSettings(); settings.Converters.Add(new StringEnumConverter {CamelCaseText = true}); return settings; }); 

(见http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data

在你的Global.asax.cs中添加

 HttpConfiguration config = GlobalConfiguration.Configuration; config.Formatters.JsonFormatter.SerializerSettings.Converters.Add (new Newtonsoft.Json.Converters.StringEnumConverter());