Condividi tramite


CA2238: Implementare correttamente i metodi di serializzazione

TypeName

ImplementSerializationMethodsCorrectly

CheckId

CA2238

Category

Microsoft.Usage

Breaking Change

Sostanziale - Se il metodo è visibile all'esterno dell'assembly.

Non sostanziale - Se il metodo non è visibile all'esterno dell'assembly.

Causa

Un metodo che gestisce un evento di serializzazione non dispone della visibilità, del tipo restituito o della firma corretta.

Descrizione della regola

Un metodo viene designato come gestore eventi di serializzazione mediante l'applicazione di uno degli attributi degli eventi di serializzazione riportati di seguito:

I gestori eventi di serializzazione utilizzano un parametro di tipo StreamingContext, restituiscono void e hanno visibilità private.

Come correggere le violazioni

Per correggere una violazione di questa regola, correggere la firma, il tipo restituito o la visibilità del gestore eventi di serializzazione.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito vengono illustrati gestori eventi di serializzazione dichiarati correttamente.

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

Regole correlate

CA2236: Chiamare metodi della classe base su tipi ISerializable

CA2240: Implementare ISerializable in modo corretto

CA2229: Implementare costruttori di serializzazione

CA2235: Contrassegnare tutti i campi non serializzabili

CA2237: Contrassegnare i tipi ISerializable con SerializableAttribute

CA2239: Fornire metodi di deserializzazione per i campi facoltativi

CA2120: Proteggere i costruttori di serializzazione