CA2238: Serialisierungsmethoden korrekt implementieren

TypeName

ImplementSerializationMethodsCorrectly

CheckId

CA2238

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Unterbrechend – Wenn die Methode außerhalb der Assembly sichtbar ist.

Nicht unterbrechend – Wenn die Methode nicht außerhalb der Assembly sichtbar ist.

Ursache

Eine Methode, die ein Serialisierungsereignis behandelt, verfügt nicht über die richtige Signatur, den richtigen Rückgabetyp oder die richtige Sichtbarkeit.

Regelbeschreibung

Einer Methode wird ein Serialisierungsereignishandler zugewiesen, indem eines der folgenden Serialisierungsereignisattribute angewendet wird:

Serialisierungsereignishandler nehmen einen einzelnen Parameter des Typs System.Runtime.Serialization.StreamingContext an, geben void zurück, und haben private-Sichtbarkeit.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, korrigieren Sie die Signatur, den Rückgabetyp oder die Sichtbarkeit des Serialisierungsereignishandlers.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Das folgende Beispiel zeigt ordnungsgemäß deklarierte Serialisierungsereignishandler.

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

Verwandte Regeln

CA2236: Basisklassenmethoden auf ISerializable-Typen aufrufen

CA2240: ISerializable ordnungsgemäß implementieren

CA2229: Serialisierungskonstruktoren implementieren

CA2235: Alle nicht serialisierbaren Felder markieren

CA2237: Markieren von ISerializable-Typen mit SerializableAttribute

CA2239: Deserialisierungsmethoden für optionale Felder angeben

CA2120: Sichere Serialisierungskonstruktoren