Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
CA2237: Mark ISerializable types with SerializableAttribute
Collapse the table of content
Expand the table of content

CA2237: 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.

Do not suppress a warning from this rule for exception classes because they must be serializable to work correctly across application domains.

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
Show:
© 2015 Microsoft