Fornecer métodos de desserialização campos opcionais

TypeName

ProvideDeserializationMethodsForOptionalFields

CheckId

CA2239

Category (Categoria)

Microsoft.uso

Quebrando alterar

Não separável

Causa

Um tipo tem um campo é marcado com o System.Runtime.Serialization.OptionalFieldAttribute atributo e o tipo não fornece de-serialização métodos de manipulação de eventos.

Descrição da regra

The OptionalFieldAttribute atributo não tem efeito na serialização; um campo marcado com o atributo é serializado. No entanto, o campo é ignorado de-serialização e mantém o valor padrão associado ao seu tipo.De-serialização manipuladores de eventos devem ser declarado como conjunto o campo durante de-serialização processo.

Como corrigir violações

Para corrigir uma violação dessa regra, adicione de-serialização métodos para o tipo de manipulação de eventos.

Quando suprimir avisos

É seguro eliminar um aviso essa regra se o campo deve ser ignorado durante de-serialização processo.

Exemplo

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

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

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

Tipos ISerializable marcar com o SerializableAttribute

Proteger os construtores de serialização