Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
TypeName |
MarkAllNonSerializableFields |
CheckId |
CA2235 |
<strong>Categoria</strong> |
Microsoft.Usage |
Alteração significativa |
Não separável |
Causa
Um campo de instância de um tipo que não é serializável está declarado em um tipo que pode ser serializado.
Descrição da regra
Um tipo serializável é aquele que está marcado com o System.SerializableAttribute atributo.Quando o tipo for serializado, um System.Runtime.Serialization.SerializationException exceção é lançada se um tipo contém um campo de instância de um tipo que não é serializável.
Como corrigir violações
Para corrigir uma violação desta regra, aplicar o System.NonSerializedAttribute de atributo para o campo que não é serializável.
Quando suprimir avisos
Suprimir somente um aviso da regra, se um System.Runtime.Serialization.ISerializationSurrogate tipo é declarado que permite que as instâncias do campo a ser serializado e desserializado.
Exemplo
O exemplo a seguir mostra um tipo que viola a regra e um tipo que satisfaça a regra.
Imports System
Imports System.Runtime.Serialization
Namespace UsageLibrary
Public Class Mouse
Dim buttons As Integer
Dim scanTypeValue As String
ReadOnly Property NumberOfButtons As Integer
Get
Return buttons
End Get
End Property
ReadOnly Property ScanType As String
Get
Return scanTypeValue
End Get
End Property
Sub New(numberOfButtons As Integer, scanType As String)
buttons = numberOfButtons
scanTypeValue = scanType
End Sub
End Class
<SerializableAttribute> _
Public Class InputDevices1
' Violates MarkAllNonSerializableFields.
Dim opticalMouse As Mouse
Sub New()
opticalMouse = New Mouse(5, "optical")
End Sub
End Class
<SerializableAttribute> _
Public Class InputDevices2
' Satisfies MarkAllNonSerializableFields.
<NonSerializedAttribute> _
Dim opticalMouse As Mouse
Sub New()
opticalMouse = New Mouse(5, "optical")
End Sub
End Class
End Namespace
using System;
using System.Runtime.Serialization;
namespace UsageLibrary
{
public class Mouse
{
int buttons;
string scanTypeValue;
public int NumberOfButtons
{
get { return buttons; }
}
public string ScanType
{
get { return scanTypeValue; }
}
public Mouse(int numberOfButtons, string scanType)
{
buttons = numberOfButtons;
scanTypeValue = scanType;
}
}
[SerializableAttribute]
public class InputDevices1
{
// Violates MarkAllNonSerializableFields.
Mouse opticalMouse;
public InputDevices1()
{
opticalMouse = new Mouse(5, "optical");
}
}
[SerializableAttribute]
public class InputDevices2
{
// Satisfies MarkAllNonSerializableFields.
[NonSerializedAttribute]
Mouse opticalMouse;
public InputDevices2()
{
opticalMouse = new Mouse(5, "optical");
}
}
}
Regras relacionadas
CA2236: Chamar os métodos de classe base nos tipos de ISerializable
CA2240: ISerializable de implementar corretamente
CA2229: Construtores de serialização de implementar
CA2238: Implementar métodos de serialização corretamente
CA2237: Os tipos ISerializable da marca com o SerializableAttribute
CA2239: Fornecer métodos para os campos opcionais de desserialização