CA2237: Označte typy ISerializable pomocí SerializableAttribute
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2237 |
Název | Označte typy ISerializable pomocí SerializableAttribute |
Kategorie | Využití |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | No |
Externě viditelný typ implementuje System.Runtime.Serialization.ISerializable rozhraní a typ není označen atributem System.SerializableAttribute . Pravidlo ignoruje odvozené typy, jejichž základní typ není serializovatelný.
Aby modul CLR (Common Language Runtime) rozpoznal jako serializovatelný, musí být typy označeny atributem SerializableAttribute , i když typ používá vlastní serializační rutinu ISerializable prostřednictvím implementace rozhraní.
Chcete-li opravit porušení tohoto pravidla, použijte SerializableAttribute atribut na typ.
Nepotlačujte upozornění z tohoto pravidla pro třídy výjimek, protože musí být serializovatelné, aby správně fungovaly napříč doménami aplikace.
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA2237
// The code that's violating the rule is on this line.
#pragma warning restore CA2237
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA2237.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Následující příklad ukazuje typ, který porušuje pravidlo. Odkomentujte řádek atributu SerializableAttribute tak, aby vyhovoval pravidlu.
Imports System.Runtime.Serialization
Namespace ca2237
' <SerializableAttribute> _
Public Class BaseType
Implements ISerializable
Dim baseValue As Integer
Sub New()
baseValue = 3
End Sub
Protected Sub New(
info As SerializationInfo, context As StreamingContext)
baseValue = info.GetInt32("baseValue")
End Sub
Overridable Sub GetObjectData(
info As SerializationInfo, context As StreamingContext) Implements ISerializable.GetObjectData
info.AddValue("baseValue", baseValue)
End Sub
End Class
End Namespace
// [SerializableAttribute]
public class BaseType : ISerializable
{
int baseValue;
public BaseType()
{
baseValue = 3;
}
protected BaseType(
SerializationInfo info, StreamingContext context)
{
baseValue = info.GetInt32("baseValue");
}
public virtual void GetObjectData(
SerializationInfo info, StreamingContext context)
{
info.AddValue("baseValue", baseValue);
}
}
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby: