Comment dire globalement à Json.Net d’appliquer SsortingngEnumConverter à toutes les énumérations

Je souhaite désérialiser les énumérations à leur représentation sous forme de chaîne et inversement avec json.net. La seule façon que je puisse trouver pour demander au framework d’appliquer son SsortingngEnumConverter est d’annoter les propriétés en question comme ceci:

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

Cependant, dans mon cas d’utilisation, il serait beaucoup plus pratique de configurer json.net globalement de manière à ce que toutes les énumérations soient sérialisées à l’aide de SsortingngEnumConverter , sans annotations supplémentaires.

Y a-t-il un moyen de le faire, par exemple avec l’aide de JsonSerializerSettings personnalisés?

Ajoutez un SsortingngEnumConverter à la collection JsonSerializerSettings Converters.

Documentation: sérialiser avec JsonConverters


Si vous souhaitez que le sérialiseur utilise camelCasing, vous pouvez également définir ceci:

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

Cela va sérialiser SomeValue à someValue .

Les autres réponses fonctionnent pour ASP.NET, mais si vous souhaitez définir ces parameters généralement pour appeler JsonConvert dans n’importe quel contexte, vous pouvez le faire:

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

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

Dans votre Global.asax.cs add

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

Pour ASP.NET Core 2, procédez comme suit:

  public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.Converters.Add(new SsortingngEnumConverter()); }); ... 

Notez qu’il ne s’agit pas de services.AddJsonOptions(...) , il doit être étiqueté sur MVC car vous créez des parameters pour MVC.