CA2238: Implement serialization methods correctly

Item Value
RuleId 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:

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.

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

CA2236: Call base class methods on ISerializable types

CA2240: Implement ISerializable correctly

CA2229: Implement serialization constructors

CA2235: Mark all non-serializable fields

CA2237: Mark ISerializable types with SerializableAttribute

CA2239: Provide deserialization methods for optional fields

CA2120: Secure serialization constructors