CA2239: Fornecer métodos de desserialização de campos opcionais
TypeName |
ProvideDeserializationMethodsForOptionalFields |
CheckId |
CA2239 |
<strong>Categoria</strong> |
Microsoft.Usage |
Alteração significativa |
Não separável |
Causa
Um tipo tem um campo que está marcado com o System.Runtime.Serialization.OptionalFieldAttribute atributo e o tipo não fornece métodos de manipulação de eventos de desserialização.
Descrição da regra
O OptionalFieldAttribute atributo não tem efeito sobre a serialização; um campo marcado com o atributo é serializado. No entanto, o campo será ignorado na desserialização e mantém o valor padrão associado ao seu tipo. Os manipuladores de eventos de desserialização devem ser declarados para definir o campo durante o processo de desserialização.
Como corrigir violações
Para corrigir uma violação desta regra, adicione métodos ao tipo de manipulação de eventos de desserialização.
Quando suprimir avisos
É seguro eliminar um aviso esta regra se o campo deve ser ignorado durante o processo de desserialização.
Exemplo
O exemplo a seguir mostra os métodos de tratamento de um tipo com um campo opcional e o evento de desserialização.
Imports System
Imports System.Reflection
Imports System.Runtime.Serialization
<Assembly: AssemblyVersionAttribute("2.0.0.0")>
Namespace UsageLibrary
<SerializableAttribute> _
Public Class SerializationEventHandlers
<OptionalFieldAttribute(VersionAdded := 2)> _
Dim optionalField As Integer = 5
<OnDeserializingAttribute> _
Private Sub OnDeserializing(context As StreamingContext)
optionalField = 5
End Sub
<OnDeserializedAttribute> _
Private Sub OnDeserialized(context As StreamingContext)
' Set optionalField if dependent on other deserialized values.
End Sub
End Class
End Namespace
using System;
using System.Reflection;
using System.Runtime.Serialization;
[assembly: AssemblyVersionAttribute("2.0.0.0")]
namespace UsageLibrary
{
[SerializableAttribute]
public class SerializationEventHandlers
{
[OptionalFieldAttribute(VersionAdded = 2)]
int optionalField = 5;
[OnDeserializingAttribute]
void OnDeserializing(StreamingContext context)
{
optionalField = 5;
}
[OnDeserializedAttribute]
void OnDeserialized(StreamingContext context)
{
// Set optionalField if dependent on other deserialized values.
}
}
}
Regras relacionadas
CA2236: Chamar métodos da classe base nos tipos de ISerializable
CA2240: Implementa ISerializable corretamente
CA2229: Implementar os construtores de serialização
CA2238: Implementar métodos de serialização corretamente
CA2235: Marcar todos os campos não serializáveis
CA2237: Tipos de ISerializable de marca com o SerializableAttribute