Heim >Backend-Entwicklung >C++ >Wie verwende ich benutzerdefinierte Enum-Wertnamen mit 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:
<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>
<code class="language-csharp">var options = new JsonSerializerOptions { Converters = { new CustomEnumStringEnumConverter() } };</code>
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>
Sie können Aufzählungen jetzt mit benutzerdefinierten JsonConverter
s serialisieren und deserialisieren:
<code class="language-csharp">// 序列化枚举值 var json = JsonSerializer.Serialize(value, options); // 反序列化枚举值 var value = JsonSerializer.Deserialize<Enum>(json, options);</code>
Anleitung:
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!