CA2239: Fornecer métodos de desserialização para campos opcionais

Item Valor
RuleId CA2239
Categoria Microsoft.Usage
Alteração da falha Sem interrupção

Causa

Um tipo tem um campo que foi marcado com o atributo System.Runtime.Serialization.OptionalFieldAttribute e não fornece métodos de tratamento de eventos de desserialização.

Descrição da regra

O atributo OptionalFieldAttribute não tem efeito na serialização; um campo marcado com o atributo é serializado. No entanto, o campo é 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 dessa regra, adicione métodos de tratamento de eventos de desserialização ao tipo.

Quando suprimir avisos

É seguro suprimir um aviso dessa regra quando o campo deve ser ignorado durante o processo de desserialização.

Exemplo

O exemplo a seguir mostra um tipo com um campo opcional e métodos de tratamento de eventos de desserialização.

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.
      }
   }
}

CA2236: Chamar métodos da classe base em tipos ISerializable

CA2240: Implementar ISerializable corretamente

CA2229: Implementar construtores de serialização

CA2238: Implementar métodos de serialização corretamente

CA2235: Marcar todos os campos não serializáveis

CA2237: Marcar tipos ISerializable com SerializableAttribute

CA2120: Construtores de serialização seguros