1450 Stimmen

JavaScriptSerializer - JSON Serialisierung von Enum als Zeichenfolge

Ich habe eine Klasse, die eine enum-Eigenschaft enthält, und beim Serialisieren des Objekts mit JavaScriptSerializer enthält mein JSON-Ergebnis den Ganzzahlwert der Aufzählung anstelle ihres string-"Namens". Gibt es eine Möglichkeit, die Aufzählung als string in meinem JSON zu erhalten, ohne einen benutzerdefinierten JavaScriptConverter erstellen zu müssen? Vielleicht gibt es ein Attribut, mit dem ich die enum-Definition oder Objekteigenschaft dekorieren könnte?

Als Beispiel:

enum Geschlecht { Männlich, Weiblich }

class Person
{
    int Alter { get; set; }
    Geschlecht Geschlecht { get; set; }
}

Gewünschtes JSON-Ergebnis:

{ "Alter": 35, "Geschlecht": "Männlich" }

Im Idealfall suche ich nach einer Antwort mit integrierten .NET-Framework-Klassen, wenn dies nicht möglich ist, sind Alternativen (wie Json.net) willkommen.

27voto

GuCa Punkte 251

Hier ist die Antwort für newtonsoft.json

enum Geschlecht { Männlich, Weiblich }

class Person
{
    int Alter { get; set; }

    [JsonConverter(typeof(StringEnumConverter))]
    Geschlecht Geschlecht { get; set; }
}

27voto

Serj-Tm Punkte 15801

Asp.Net Core 3 mit System.Text.Json

public void ConfigureServices(IServiceCollection services)
{

    services
        .AddControllers()
        .AddJsonOptions(options => 
           options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter())
        );

    //...
 }

27voto

O. Shai Punkte 513

Für .NET 6.0 wenn Sie den integrierten JsonSerializer (System.Text.Json) verwenden möchten

Dann wird es sofort ausgeführt, Sie müssen nur das integrierte JsonStringEnumConverter Attribut verwenden. Zum Beispiel:

[JsonConverter(typeof(JsonStringEnumConverter))]
public SomeEnumType EnumProperty { get; set; }

Und das war's auch schon, ABER stellen Sie sicher, dass Ihr SomeEnumType Werte mit den genauen Zeichenfolgen enthält, sonst wird eine Ausnahme ausgelöst. Die Groß-/Kleinschreibung scheint nicht beachtet zu werden.

Quelle: https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-customize-properties?pivots=dotnet-6-0#enums-as-strings

20voto

GorvGoyl Punkte 32029

Sie können auch einen Konverter zu Ihrem JsonSerializer hinzufügen, wenn Sie das JsonConverter-Attribut nicht verwenden möchten:

string SerializedResponse = JsonConvert.SerializeObject(
     objToSerialize, 
     new Newtonsoft.Json.Converters.StringEnumConverter()
); 

Es wird für jedes enum funktionieren, das es während dieser Serialisierung sieht.

17voto

Yahya Hussein Punkte 8090

Für ASP.Net Core fügen Sie einfach Folgendes Ihrer Startup-Klasse hinzu:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X