System.Text.Json: Benutzerdefinierte Enum-Wertnamen
System.Text.Json bietet keine integrierte Möglichkeit zur Angabe benutzerdefinierter Werte Werte für Enum-Mitglieder. Es gibt jedoch mehrere Möglichkeiten, dies zu erreichen:
Verwenden einer benutzerdefinierten JsonConverterFactory:
Erstellen Sie eine benutzerdefinierte Konverterklasse, die von JsonConverterFactory erbt und die Methoden CanConvert und CreateConverter implementiert. Überprüfen Sie in CanConvert, ob der zu konvertierende Typ eine Aufzählung ist. Erstellen Sie in CreateConverter eine benutzerdefinierte JsonEnumConverter-Instanz, die die benutzerdefinierten Werte verarbeitet.
Verwendung einer Bibliothek eines Drittanbieters:
Bibliotheken wie Macross.Json.Extensions bieten Konverter, die dies unterstützen benutzerdefinierte Enum-Wertnamen. Installieren Sie die Bibliothek und dekorieren Sie Ihre Enumeration mit [JsonConverter(typeof(JsonStringEnumMemberConverter))].
Erstellen eines benutzerdefinierten Konverters und einer benutzerdefinierten Factory in .NET 6 oder früher:
In .NET 6 oder früher, ein benutzerdefinierter Konverter und eine Konverter-Factory sind für das Roundtripping von Enumerationen mit benutzerdefinierten Namen erforderlich. Dies umfasst das Parsen von Ganzzahl- und Zeichenfolgenwerten, das Umbenennen von [Flags]-Enumerationskomponenten und das Konvertieren von Enumerationen aller möglichen zugrunde liegenden Typen.
Verwendung eines generischen Enum-Konverters:
Ein generischer Enum-Konverter kann erstellt werden, um sowohl [Flags]- als auch Nicht-[Flags]-Enums zu verarbeiten, mit benutzerdefinierter Überschreibung für den Namen Konvertierung bei Bedarf. Dies ist aufwändiger als die Verwendung eines spezifischen Konverters für jeden Typ.
Codebeispiel mit einer benutzerdefinierten Konverterfabrik:
public class JsonEnumMemberStringEnumConverter : JsonConverterFactory { public override bool CanConvert(Type typeToConvert) => baseConverter.CanConvert(typeToConvert); public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { var query = from field in typeToConvert.GetFields(BindingFlags.Public | BindingFlags.Static) let attr = field.GetCustomAttribute<EnumMemberAttribute>() where attr != null && attr.Value != null select (field.Name, attr.Value); var dictionary = query.ToDictionary(p => p.Item1, p => p.Item2); if (dictionary.Count > 0) return new JsonStringEnumConverter(new DictionaryLookupNamingPolicy(dictionary, namingPolicy), allowIntegerValues).CreateConverter(typeToConvert, options); else return baseConverter.CreateConverter(typeToConvert, options); } }
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonWie kann ich Enum-Wertnamen in System.Text.Json anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!