Megosztás a következőn keresztül:


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);
    }
}