Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Propriedade | valor |
|---|---|
| ID da regra | CA2237 |
| Título | Marcar tipos ISerializable com SerializableAttribute |
| Categoria | Utilização |
| A correção causa interrupção ou não | Ininterrupto |
| Habilitado por padrão no .NET 10 | Não |
| Línguas aplicáveis | C# e Visual Basic |
Motivo
Um tipo visível externamente implementa a System.Runtime.Serialization.ISerializable interface e o tipo não é marcado com o System.SerializableAttribute atributo. A regra ignora tipos derivados cujo tipo base não é serializável.
Descrição da regra
Para serem reconhecidos pelo common language runtime como serializáveis, os tipos devem ser marcados com o SerializableAttribute atributo mesmo que o tipo use uma rotina de serialização personalizada por meio da implementação da ISerializable interface.
Como corrigir violações
Para corrigir uma violação dessa regra, aplique o SerializableAttribute atributo ao tipo.
Quando suprimir avisos
Não suprima um aviso desta regra para classes de exceção, porque elas devem ser serializáveis para funcionar corretamente entre os domínios da aplicação.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA2237
// The code that's violating the rule is on this line.
#pragma warning restore CA2237
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2237.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Exemplo
O exemplo a seguir mostra um tipo que viola a regra. Descomente a linha do atributo SerializableAttribute para satisfazer a regra.
Imports System.Runtime.Serialization
Namespace ca2237
' <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
Overridable Sub GetObjectData(
info As SerializationInfo, context As StreamingContext) Implements ISerializable.GetObjectData
info.AddValue("baseValue", baseValue)
End Sub
End Class
End Namespace
// [SerializableAttribute]
public class BaseType : ISerializable
{
int baseValue;
public BaseType()
{
baseValue = 3;
}
protected BaseType(
SerializationInfo info, StreamingContext context)
{
baseValue = info.GetInt32("baseValue");
}
public virtual void GetObjectData(
SerializationInfo info, StreamingContext context)
{
info.AddValue("baseValue", baseValue);
}
}