Tipos ISerializable marcar com o SerializableAttribute

TypeName

MarkISerializableTypesWithSerializable

CheckId

CA2237

Category (Categoria)

Microsoft.uso

Quebrando alterar

Não separável

Causa

Um tipo visível externamente implementa o System.Runtime.Serialization.ISerializable interface e o tipo não está marcado com o System.SerializableAttribute atributo. A regra ignora tipos derivados cujo tipo de base não é serializável.

Descrição da regra

Sejam reconhecidos pelo common linguagem tempo de execução sistema autônomo serializável, sistema autônomo tipos devem ser marcados com o SerializableAttribute atributo mesmo se o tipo de usa uma rotina de serialização personalizada através da implementação das ISerializable interface.

Como corrigir violações

Para corrigir uma violação dessa regra, aplique o SerializableAttribute o tipo de atributo.

Quando suprimir avisos

Elimina um aviso da regra para classes de exceção como deve ser serializáveis para funcionar corretamente entre domínios de aplicativo.

Exemplo

O exemplo a seguir mostra um tipo que viola a regra.Descomente a SerializableAttribute linha de atributo para satisfazer a regra.

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
using System;
using System.Runtime.Serialization;
using System.Security.Permissions;

namespace UsageLibrary
{
   // [SerializableAttribute]
   public class BaseType : ISerializable
   {
      int baseValue;

      public BaseType()
      {
         baseValue = 3;
      }

      protected BaseType(
         SerializationInfo info, StreamingContext context)
      {
         baseValue = info.GetInt32("baseValue");
      }

      [SecurityPermissionAttribute(SecurityAction.Demand, 
          SerializationFormatter = true)]
      public virtual void GetObjectData(
         SerializationInfo info, StreamingContext context)
      {
         info.AddValue("baseValue", baseValue);
      }
   }
}

Regras relacionadas

Chamar métodos da classe base em tipos ISerializable

Implementar ISerializable corretamente

Implementar construtores de serialização

Implementar métodos de serialização corretamente

Marcar todos os campos não serializáveis

Fornecer métodos de desserialização campos opcionais

Proteger os construtores de serialização