Sdílet prostřednictvím


CA2239: Poskytujte metody deserializace pro nepovinné pole

TypeName

ProvideDeserializationMethodsForOptionalFields

CheckId

CA2239

Kategorie

Microsoft.Usage

Narušující změna

Nenarušující

Příčina

Typ má pole označené atributem OptionalFieldAttribute a neposkytuje metody zpracování události rušení serializace.

Popis pravidla

Atribut OptionalFieldAttribute nemá žádný vliv na serializaci; pole označené atributem je serializované.Pole je však na rušení serializace ignorováno a zachová si výchozí hodnotu přidruženou k jeho typu.Obslužné rutiny události rušení serializace by měly být deklarovány k nastavení pole během procesu rušení serializace.

Jak vyřešit porušení

Pro opravu porušení tohoto pravidla přidejte typu metody zpracování události rušení serializace.

Kdy potlačit upozornění

Potlačit upozornění tohoto pravidla je bezpečné, pokud má být pole během procesu rušení serializace ignorováno.

Příklad

Následující příklad ukazuje typ s volitelným polem a metodami zpracování události rušení serializace.

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

Související pravidla

CA2236: Volejte metody třídy Base na typech ISerializable

CA2240: Implementujte správně ISerializable

CA2229: Implementovat serializační konstruktory

CA2238: Implementujte správně metody serializace

CA2235: Označte všechna neserializovatelná pole

CA2237: Označte typy ISerializable pomocí SerializableAttribute

CA2120: Zabezpečte serializační konstruktory