CA2237: ISerializable-típusok megjelölése a SerializableAttribute használatával
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2237 |
Cím | ISerializable-típusok megjelölése SerializableAttribute használatával |
Kategória | Használat |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
Egy külsőleg látható típus implementálja az System.Runtime.Serialization.ISerializable interfészt, és a típus nincs megjelölve az System.SerializableAttribute attribútummal. A szabály figyelmen kívül hagyja azokat a származtatott típusokat, amelyek alaptípusa nem szerializálható.
Szabály leírása
Ahhoz, hogy a közös nyelvi futtatókörnyezet szerializálhatóként felismerje, a típusokat akkor is meg kell jelölni az SerializableAttribute attribútummal, ha a típus egyéni szerializálási rutint használ a ISerializable felület implementálásán keresztül.
Szabálysértések kijavítása
A szabály megsértésének kijavításához alkalmazza az SerializableAttribute attribútumot a típusra.
Mikor kell letiltani a figyelmeztetéseket?
A kivételosztályok esetében ne tiltsa el a szabály figyelmeztetését, mert szerializálhatónak kell lenniük ahhoz, hogy megfelelően működjenek az alkalmazástartományokban.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA2237
// The code that's violating the rule is on this line.
#pragma warning restore CA2237
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA2237.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példa
Az alábbi példa egy szabályt sértő típust mutat be. Bontsa ki az SerializableAttribute attribútumsort a szabálynak való megfelelés érdekében.
Imports System
Imports System.Runtime.Serialization
Imports System.Security.Permissions
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);
}
}
Kapcsolódó szabályok
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: