Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
| TypeName | ImplementSerializationMethodsCorrectly | 
| CheckId | CA2238 | 
| Category | Microsoft.Usage | 
| Breaking Change | Breaking - If the method is visible outside the assembly. Non Breaking - If the method is not visible outside the assembly. | 
Cause
A method that handles a serialization event does not have the correct signature, return type, or visibility.
Rule Description
A method is designated a serialization event handler by applying one of the following serialization event attributes:
Serialization event handlers take a single parameter of type System.Runtime.Serialization.StreamingContext, return void, and have private visibility.
How to Fix Violations
To fix a violation of this rule, correct the signature, return type, or visibility of the serialization event handler.
When to Suppress Warnings
Do not suppress a warning from this rule.
Example
The following example shows correctly declared serialization event handlers.
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) {}
   }
}
Related Rules
Call base class methods on ISerializable types
Implement ISerializable correctly
Implement serialization constructors
Mark all non-serializable fields
Mark ISerializable types with SerializableAttribute