如何在全球范围内告诉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; });
在你的Global.asax.cs中添加
HttpConfiguration config = GlobalConfiguration.Configuration; config.Formatters.JsonFormatter.SerializerSettings.Converters.Add (new Newtonsoft.Json.Converters.StringEnumConverter());