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.
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>
Registrierung und Nutzung des benutzerdefinierten Konverters:
<code class="language-csharp">var options = new JsonSerializerOptions { Converters = { new JsonEnumMemberStringEnumConverter() }, // ... }; var json = JsonSerializer.Serialize(values, options);</code>
Dieser Konverter hat folgende Vorteile:
JsonStringEnumConverter
. 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>
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.
[Flags]
-Attributen erfordern möglicherweise ein geändertes JsonConverter
. Weitere Informationen zum Umgang mit dieser Situation finden Sie in den Anweisungen in der Antwort. JsonStringEnumConverter
sein JsonNamingPolicy
während der Deserialisierung. Dieses Problem wurde in Pull Request 73348 behoben. [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!