CA2229: Implementar constructores de serializaciónCA2229: Implement serialization constructors

TypeNameTypeName ImplementSerializationConstructorsImplementSerializationConstructors
Identificador de comprobaciónCheckId CA2229CA2229
CategoríaCategory Microsoft.UsageMicrosoft.Usage
Cambio problemáticoBreaking Change No trascendentalNon Breaking

MotivoCause

El tipo implementa la System.Runtime.Serialization.ISerializable interfaz, no es un delegado o interfaz y una de las siguientes condiciones es verdadera:The type implements the System.Runtime.Serialization.ISerializable interface, is not a delegate or interface, and one of the following conditions is true:

Descripción de la reglaRule description

Esta regla es relevante para los tipos que admiten la serialización personalizada.This rule is relevant for types that support custom serialization. Un tipo admite la serialización personalizada si implementa el ISerializable interfaz.A type supports custom serialization if it implements the ISerializable interface. Se requiere el constructor de serialización para deserializar o volver a crear los objetos que se han serializado utilizando el System.Runtime.Serialization.ISerializable.GetObjectData método.The serialization constructor is required to deserialize, or re-create objects that have been serialized using the System.Runtime.Serialization.ISerializable.GetObjectData method.

Cómo corregir infraccionesHow to fix violations

Para corregir una infracción de esta regla, implemente el constructor de serialización.To fix a violation of this rule, implement the serialization constructor. Para una clase sellada, marque el constructor como privado; de lo contrario, márquelo como protegido.For a sealed class, make the constructor private; otherwise, make it protected.

Cuándo Suprimir advertenciasWhen to suppress warnings

No suprima una infracción de la regla.Do not suppress a violation of the rule. El tipo no será deserializable y no funcionará en muchos escenarios.The type will not be deserializable, and will not function in many scenarios.

EjemploExample

El ejemplo siguiente muestra un tipo que cumple la regla.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: Marcar los tipos ISerializable con SerializableAttributeCA2237: Mark ISerializable types with SerializableAttribute

Vea tambiénSee also