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.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA1869 |
| Titel | JsonSerializerOptions-exemplaren in de cache opslaan en opnieuw gebruiken |
| Categorie | Prestaties |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Als suggestie |
| Toepasselijke talen | C# en Visual Basic |
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.
Hoe schendingen op te lossen
U kunt het singleton-patroon gebruiken om te voorkomen dat er steeds een nieuw JsonSerializerOptions exemplaar wordt gemaakt wanneer uw code wordt uitgevoerd.
Voorbeeld
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 zijn, moeten respectievelijk s_writeOptions of s_readOptions opnieuw worden gebruikt.
Wanneer waarschuwingen onderdrukken
Het is veilig om deze waarschuwing te onderdrukken als u weet dat uw code niet 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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.