Partilhar via


CA2229: Implementar os construtores de serialização

TypeName

ImplementSerializationConstructors

CheckId

CA2229

<strong>Categoria</strong>

Microsoft.Usage

Alteração significativa

Não separável

Causa

O tipo implementa o System.Runtime.Serialization.ISerializable interface, não é um delegado ou a interface e uma das seguintes condições for verdadeira:

Descrição da regra

Essa regra é relevante para tipos que oferecem suporte a serialização personalizada. Um tipo oferece suporte a serialização personalizada se ele implementa o ISerializable interface. O construtor de serialização é necessária para desserializar ou recriar os objetos que tiverem sido serializados usando o ISerializable.GetObjectData método.

Como corrigir violações

Para corrigir uma violação desta regra, implemente o construtor de serialização. Para uma classe selada, tornar o construtor particular; Caso contrário, tornam protegido.

Quando suprimir avisos

Não suprimir uma violação da regra. O tipo não serão deserializable e não funcionará em muitos cenários.

Exemplo

O exemplo a seguir mostra um tipo que satisfaça a regra.

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

Regras relacionadas

CA2237: Tipos de ISerializable de marca com o SerializableAttribute

Consulte também

Referência

System.Runtime.Serialization.ISerializable

System.Runtime.Serialization.SerializationInfo

System.Runtime.Serialization.StreamingContext