88 votes

Comment dire à Json.Net d'appliquer globalement StringEnumConverter à tous les enums

Je veux désérialiser les énumérations de leur représentation sous forme de chaîne et vice versa json.net. La seule façon que je pouvais comprendre pour raconter le cadre d'appliquer ses StringEnumConverter est d'annoter les propriétés en question comme ceci:

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

Cependant, dans mon cas d'utilisation, il serait beaucoup plus pratique pour configurer json.net à l'échelle mondiale, tels que tous les énumérations obtenir (de)sérialisé à l'aide de l' StringEnumConverter, sans le besoin d'annotations.

Est-il possible de le faire, par exemple avec l'aide de la coutume JsonSerializerSettings?

118voto

James Newton-King Points 13880

Ajoutez un StringEnumConverter à la collection JsonSerializerSettings convertisseurs.


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

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

Cela sérialisera SomeValue en "someValue".

40voto

Gaz Points 1449

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

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

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

18voto

Iggy Points 1277

Dans votre Global.asax.cs ajouter

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X