Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschappen | Weergegeven als |
|---|---|
| Regel-id | CA1869 |
| Titel | JsonSerializerOptions-exemplaren in de cache opslaan en opnieuw gebruiken |
| Categorie | Prestaties |
| Oplossing is brekend of niet-brekend | Niet-brekend |
| Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Een lokaal exemplaar van JsonSerializerOptions wordt eenmaal gebruikt als het options argument van een Serialize of Deserialize aanroep.
Beschrijving van regel
Het gebruik van een lokaal exemplaar van JsonSerializerOptions serialisatie of deserialisatie kan de prestaties van uw toepassing aanzienlijk verminderen als uw code meerdere keren wordt uitgevoerd omdat System.Text.Json intern serialisatiegerelateerde metagegevens in het opgegeven exemplaar in de cache opneemt.
Schendingen oplossen
U kunt het singleton-patroon gebruiken om te voorkomen dat er steeds een nieuw JsonSerializerOptions exemplaar wordt gemaakt wanneer uw code wordt uitgevoerd.
Opmerking
In het volgende codefragment ziet u twee schendingen van 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 });
}
Met het volgende codefragment worden de schendingen opgelost:
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);
}
Als er verdere aanroepen naar Serialize of Deserialize, s_writeOptions of s_readOptions opnieuw moeten worden gebruikt, respectievelijk.
Wanneer waarschuwingen onderdrukken
Het is veilig om deze waarschuwing te onderdrukken als u weet dat uw code meer dan één keer een JsonSerializerOptions-exemplaar zal instantiëren.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1869
// The code that's violating the rule is on this line.
#pragma warning restore CA1869
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1869.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.