Heim > Backend-Entwicklung > C++ > Wie verwende ich benutzerdefinierte Enum-Wertnamen mit System.Text.Json?

Wie verwende ich benutzerdefinierte Enum-Wertnamen mit System.Text.Json?

Patricia Arquette
Freigeben: 2025-01-14 07:54:45
Original
966 Leute haben es durchsucht

How to Use Custom Enum Value Names with System.Text.Json?

Benutzerdefinierten Enumerationswertnamen in System.Text.Json verwenden

Sie können die Klasse JsonConverter verwenden, um benutzerdefinierte Namen für Aufzählungswerte anzugeben. So geht's:

  1. Definieren Sie einen benutzerdefinierten Konverter:
<code class="language-csharp">public class CustomEnumStringEnumConverter : JsonConverter<Enum>
{
    protected override Enum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // 从JSON文本解析枚举名称
        var name = reader.GetString();

        // 获取枚举类型
        var enumType = typeToConvert;

        // 按名称查找枚举值
        Enum value;
        if (!Enum.TryParse(enumType, name, true, out value))
        {
            throw new JsonException("无效的枚举值: " + name);
        }

        return value;
    }

    protected override void Write(Utf8JsonWriter writer, Enum value, JsonSerializerOptions options)
    {
        // 获取枚举值的自定义名称
        var customName = GetCustomName(value);

        // 将自定义名称写入JSON文本
        writer.WriteStringValue(customName);
    }

    private string GetCustomName(Enum value)
    {
        // 获取枚举值的字段信息
        var fieldInfo = enumType.GetField(value.ToString());

        // 获取应用于该字段的自定义属性
        var attribute = fieldInfo.GetCustomAttribute<EnumMemberAttribute>();

        // 返回属性中的自定义名称,如果未指定则返回默认名称
        return attribute?.Value ?? value.ToString();
    }
}</code>
Nach dem Login kopieren
  1. Registrieren Sie den Konverter mit JsonSerializerOptions:
<code class="language-csharp">var options = new JsonSerializerOptions
{
    Converters = { new CustomEnumStringEnumConverter() }
};</code>
Nach dem Login kopieren
  1. Wenden Sie das EnumMember-Attribut an:

Verwenden Sie das Attribut EnumMember, um den Enumerationswert zu ergänzen und einen benutzerdefinierten Namen anzugeben:

<code class="language-csharp">public enum Example
{
    [EnumMember(Value = "Trick-Or-Treat")]
    TrickOrTreat,
    // 其他枚举值
}</code>
Nach dem Login kopieren
  1. Serialisierung und Deserialisierung:

Sie können Aufzählungen jetzt mit benutzerdefinierten JsonConverters serialisieren und deserialisieren:

<code class="language-csharp">// 序列化枚举值
var json = JsonSerializer.Serialize(value, options);

// 反序列化枚举值
var value = JsonSerializer.Deserialize<Enum>(json, options);</code>
Nach dem Login kopieren

Anleitung:

  • Diese Methode erfordert .NET Core 3.1 oder höher.
  • Wenn Sie einen benutzerdefinierten Konverter für mehrere Aufzählungstypen verwenden müssen, können Sie einen generischen Konverter erstellen.
  • Mit dieser Methode können Sie einen benutzerdefinierten Namen für den Aufzählungswert angeben und gleichzeitig die Möglichkeit zum Roundtrip des Aufzählungswerts während der Serialisierung und Deserialisierung beibehalten.

Das obige ist der detaillierte Inhalt vonWie verwende ich benutzerdefinierte Enum-Wertnamen mit System.Text.Json?. 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