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:
System.Runtime.Serialization.OnDeserializedAttribute
Serialization event handlers take a single parameter of type System.Runtime.Serialization.StreamingContext, return
void
, and haveprivate
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.
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
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