Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1869 |
| Tytuł | Buforowanie oraz ponowne wykorzystywanie wystąpień "JsonSerializerOptions" |
| Kategoria | Wydajność |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Jako sugestia |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Lokale wystąpienie JsonSerializerOptions jest używane raz jako argument options wywołania Serialize lub Deserialize.
Opis reguły
Użycie lokalnej instancji JsonSerializerOptions do serializacji lub deserializacji może znacznie obniżyć wydajność aplikacji, jeśli kod jest wykonywany wiele razy, ponieważ System.Text.Json wewnętrznie keszuje metadane związane z serializacją w podanej instancji.
Jak naprawić naruszenia
Możesz użyć wzorca Singleton, aby uniknąć tworzenia nowej instancji JsonSerializerOptions za każdym razem, gdy kod jest wykonywany.
Przykład
Poniższy fragment kodu przedstawia dwa naruszenia CA1869.
static string Serialize<T>(T value)
{
JsonSerializerOptions jsonOptions = new()
{
WriteIndented = true
};
return JsonSerializer.Serialize(value, jsonOptions);
}
static T Deserialize<T>(string json)
{
return JsonSerializer.Deserialize<T>(json, new JsonSerializerOptions { AllowTrailingCommas = true });
}
Poniższy fragment kodu naprawia naruszenia:
private static readonly JsonSerializerOptions s_writeOptions = new()
{
WriteIndented = true
};
private static readonly JsonSerializerOptions s_readOptions = new()
{
AllowTrailingCommas = true
};
static string Serialize<T>(T value)
{
return JsonSerializer.Serialize(value, s_writeOptions);
}
static T Deserialize<T>(string json)
{
return JsonSerializer.Deserialize<T>(json, s_readOptions);
}
Jeśli są dalsze wywołania do Serialize lub Deserialize, odpowiednio powinny być ponownie używane s_writeOptions lub s_readOptions.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć to ostrzeżenie, jeśli wiesz, że kod nie utworzy wystąpienia JsonSerializerOptions więcej niż raz.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1869
// The code that's violating the rule is on this line.
#pragma warning restore CA1869
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1869.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.