Mark ISerializable types with SerializableAttribute
TypeName | MarkISerializableTypesWithSerializable |
CheckId | CA2237 |
Category | Microsoft.Usage |
Breaking Change | Non Breaking |
An externally visible type implements the System.Runtime.Serialization.ISerializable interface and the type is not marked with the System.SerializableAttribute attribute. The rule ignores derived types whose base type is not serializable.
To be recognized by the common language runtime as serializable, types must be marked with the SerializableAttribute attribute even if the type uses a custom serialization routine through implementation of the ISerializable interface.
To fix a violation of this rule, apply the SerializableAttribute attribute to the type.
The following example shows a type that violates the rule. Uncomment the SerializableAttribute attribute line to satisfy the rule.
Imports System Imports System.Runtime.Serialization Imports System.Security.Permissions Namespace UsageLibrary ' <SerializableAttribute> _ Public Class BaseType Implements ISerializable Dim baseValue As Integer Sub New() baseValue = 3 End Sub Protected Sub New( _ info As SerializationInfo, context As StreamingContext) baseValue = info.GetInt32("baseValue") End Sub <SecurityPermissionAttribute(SecurityAction.Demand, _ SerializationFormatter := True)> _ Overridable Sub GetObjectData( _ info As SerializationInfo, context As StreamingContext) _ Implements ISerializable.GetObjectData info.AddValue("baseValue", baseValue) End Sub End Class End Namespace