CA2229 : Implémentez des constructeurs de sérialisationCA2229: Implement serialization constructors

TypeNameTypeName ImplementSerializationConstructorsImplementSerializationConstructors
CheckIdCheckId CA2229CA2229
CategoryCategory Microsoft.UsageMicrosoft.Usage
Modification avec ruptureBreaking Change Sans ruptureNon Breaking

CauseCause

Le type implémente le System.Runtime.Serialization.ISerializable interface, n’est pas un délégué ou une interface, et une des conditions suivantes est remplie :The type implements the System.Runtime.Serialization.ISerializable interface, is not a delegate or interface, and one of the following conditions is true:

Description de la règleRule description

Cette règle s’applique aux types qui prennent en charge la sérialisation personnalisée.This rule is relevant for types that support custom serialization. Un type prend en charge la sérialisation personnalisée s’il implémente la ISerializable interface.A type supports custom serialization if it implements the ISerializable interface. Le constructeur de sérialisation est requis pour désérialiser ou recréer des objets qui ont été sérialisés à l’aide de la System.Runtime.Serialization.ISerializable.GetObjectData (méthode).The serialization constructor is required to deserialize, or re-create objects that have been serialized using the System.Runtime.Serialization.ISerializable.GetObjectData method.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, implémentez le constructeur de sérialisation.To fix a violation of this rule, implement the serialization constructor. Dans le cas d'une classe sealed, rendez le constructeur privé ; sinon, attribuez-lui l'état protégé.For a sealed class, make the constructor private; otherwise, make it protected.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez pas une violation de la règle.Do not suppress a violation of the rule. Le type ne sera pas désérialisable et ne fonctionnera pas dans de nombreux scénarios.The type will not be deserializable, and will not function in many scenarios.

ExempleExample

L’exemple suivant illustre un type qui satisfait la règle.The following example shows a type that satisfies the rule.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Permissions;

namespace UsageLibrary 
{   
    [Serializable]
    public class SerializationConstructorsRequired : ISerializable 
    {
        private  int n1;

        // This is a regular constructor.
        public SerializationConstructorsRequired ()
        {
            n1 = -1;
        }
        // This is the serialization constructor.
        // Satisfies rule: ImplementSerializationConstructors.

        protected SerializationConstructorsRequired(
           SerializationInfo info, 
           StreamingContext context)
        {
            n1 = (int) info.GetValue("n1", typeof(int));
        }

        // The following method serializes the instance.
        [SecurityPermission(SecurityAction.LinkDemand, 
            Flags=SecurityPermissionFlag.SerializationFormatter)]
        void ISerializable.GetObjectData(SerializationInfo info, 
           StreamingContext context)
        {
            info.AddValue("n1", n1);
        }
    }
}

CA2237 : Marquez les types ISerializable avec SerializableAttributeCA2237: Mark ISerializable types with SerializableAttribute

Voir aussiSee also