Heim > Backend-Entwicklung > C++ > Wie kann ich Enum-Werte in System.Text.Json anpassen?

Wie kann ich Enum-Werte in System.Text.Json anpassen?

Barbara Streisand
Freigeben: 2025-01-14 08:36:44
Original
545 Leute haben es durchsucht

How to Customize Enum Values in System.Text.Json?

Aufzählungswerte in System.Text.Json anpassen

Schwierigkeit: Angeben benutzerdefinierter Werte für Aufzählungswerte

In .NET 5 und höher können wir JsonPropertyName nicht direkt verwenden, um benutzerdefinierte Werte für Aufzählungswerte anzugeben, wie wir es mit normalen Eigenschaften können. Diese Funktion ist nicht standardmäßig verfügbar.

Methode 1: JsonConverterFactory anpassen (empfohlen)

Um dieses Problem zu lösen, haben wir eine JsonConverter-Factory (JsonEnumMemberStringEnumConverter) eingeführt, die JsonStringEnumConverter nutzt, und sie so angepasst, dass für jeden mit [EnumMember(Value="xxx")] annotierten Aufzählungstyp ein benutzerdefiniertes JsonNamingPolicy verwendet wird. Zum Beispiel:

<code class="language-csharp">[EnumMember(Value = "Trick-Or-Treat")] // 自定义值
public enum Example { Trick, Treat, TrickOrTreat }</code>
Nach dem Login kopieren

Registrierung und Nutzung des benutzerdefinierten Konverters:

<code class="language-csharp">var options = new JsonSerializerOptions
{
    Converters = { new JsonEnumMemberStringEnumConverter() },
    // ...
};
var json = JsonSerializer.Serialize(values, options);</code>
Nach dem Login kopieren

Dieser Konverter hat folgende Vorteile:

  • Nahtlose Roundtrip-Verarbeitung von Aufzählungen mit benutzerdefinierten Werten.
  • Benutzerdefinierte Werte beim Deserialisieren beibehalten.
  • behandelt Aufzählungen mit demselben Wert, konsistent mit JsonStringEnumConverter.
  • Unterstützt veränderliche und unveränderliche Aufzählungstypen.

Methode 2: Macross.Json.Extensions-Paket

Alternativ können wir das Paket Macross.Json.Extensions verwenden, das ein JsonStringEnumMemberConverter bereitstellt, mit dem wir nach der Installation die Aufzählung wie folgt mit Anmerkungen versehen können:

<code class="language-csharp">[JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumMemberConverter))]
public enum Example { Trick, Treat, [EnumMember(Value="Trick-Or-Treat")] TrickOrTreat }</code>
Nach dem Login kopieren

Methode Drei: Generische Konverter-Factory mit benutzerdefinierten Überschreibungen (Erweitert)

Wenn Sie eine feinere Kontrolle benötigen oder Aufzählungen mit benutzerdefinierten Werten in .NET-Versionen vor 6.0 unterstützen müssen, können Sie eine generische Konverterfabrik und einen Konverter von Grund auf erstellen. Dieser Ansatz ist komplexer und erfordert möglicherweise eine Rückportierung für frühere Versionen.

Notizen

  • Aufzählungstypen mit [Flags]-Attributen erfordern möglicherweise ein geändertes JsonConverter. Weitere Informationen zum Umgang mit dieser Situation finden Sie in den Anweisungen in der Antwort.
  • In .NET-Versionen vor 6.0 ignorierte JsonStringEnumConverter sein JsonNamingPolicy während der Deserialisierung. Dieses Problem wurde in Pull Request 73348 behoben.
  • Wenn Ihre Aufzählung sowohl die Attribute [EnumMember] als auch [JsonPropertyName] hat, hat der Wert von [EnumMember] im benutzerdefinierten Konverter Vorrang.

Das obige ist der detaillierte Inhalt vonWie kann ich Enum-Werte in System.Text.Json anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage