[c#] Wie man Json.Net global sagt, den StringEnumConverter auf alle Enums anzuwenden



Answers

Die anderen Antworten funktionieren für ASP.NET. Wenn Sie diese Einstellungen jedoch allgemein für den Aufruf von JsonConvert in einem beliebigen Kontext festlegen möchten, können Sie Folgendes tun:

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

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

Question

Ich möchte Enumerationen in ihre String-Darstellung deserialisieren und umgekehrt mit json.net. Die einzige Möglichkeit, dem Framework mitzuteilen, dass es seinen StringEnumConverter anwenden StringEnumConverter besteht darin, die fraglichen Eigenschaften StringEnumConverter zu kommentieren:

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

In meinem Anwendungsfall wäre es jedoch viel einfacher, json.net global so zu konfigurieren, dass alle Enumerationen mit dem StringEnumConverter ohne zusätzliche Anmerkungen serialisiert werden.

Gibt es einen Weg dazu, zB mit Hilfe von benutzerdefinierten JsonSerializerSettings ?




Führen Sie für ASP.NET Core 2 Folgendes aus:

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

        ...

Bitte beachten Sie, dies ist nicht services.AddJsonOptions(...) , es muss auf MVC getaggt werden, da Sie Einstellungen für MVC erstellen.




Links