Partilhar via


CA2238: implementar métodos de serialização corretamente

TypeName

ImplementSerializationMethodsCorrectly

CheckId

CA2238

Categoria

Microsoft.Usage

Alteração Significativa

Quebra - se o método é visível fora do assembly.

Sem quebra - se o método não está visível fora do assembly.

Causa

Um método que manipula um evento de serialização não possui a assinatura, o tipo de retorno ou a visibilidade corretos.

Descrição da Regra

Um método é designado um manipulador de eventos de serialização aplicando um dos seguintes atributos de evento de serialização:

Os manipuladores de eventos de serialização recebem um único parâmetro do tipo StreamingContext, retorna void e tem a visibilidade private .

Como Corrigir Violações

Para corrigir uma violação desta regra, corrija a assinatura, o tipo de retorno ou a visibilidade do manipulador de eventos de serialização.

Quando Suprimir Alertas

Não elimine um alerta desta regra.

Exemplo

O exemplo a seguir mostra manipuladores de eventos de serialização declarados corretamente.

Imports System
Imports System.Runtime.Serialization

Namespace UsageLibrary

   <SerializableAttribute> _ 
   Public Class SerializationEventHandlers

      <OnSerializingAttribute> _ 
      Private Sub OnSerializing(context As StreamingContext) 
      End Sub

      <OnSerializedAttribute> _ 
      Private Sub OnSerialized(context As StreamingContext) 
      End Sub

      <OnDeserializingAttribute> _ 
      Private Sub OnDeserializing(context As StreamingContext)
      End Sub

      <OnDeserializedAttribute> _ 
      Private Sub OnDeserialized(context As StreamingContext)
      End Sub 

   End Class 

End Namespace
using System;
using System.Runtime.Serialization;

namespace UsageLibrary
{
   [SerializableAttribute]
   public class SerializationEventHandlers
   {
      [OnSerializingAttribute]
      void OnSerializing(StreamingContext context) {}

      [OnSerializedAttribute]
      void OnSerialized(StreamingContext context) {}

      [OnDeserializingAttribute]
      void OnDeserializing(StreamingContext context) {}

      [OnDeserializedAttribute]
      void OnDeserialized(StreamingContext context) {}
   }
}

Regras Relacionadas

CA2236: chamar métodos de classe base em tipos ISerializable

CA2240: implementar ISerializable corretamente

CA2229: implementar construtores de serialização

CA2235: marcar todos os campos não serializáveis

CA2237: marcar tipos ISerializable com SerializableAttribute

CA2239: fornecer métodos de desserialização para campos opcionais

CA2120: proteger construtores de serialização