CA2239: Deserialisierungsmethoden für optionale Felder angeben

TypeName

ProvideDeserializationMethodsForOptionalFields

CheckId

CA2239

Kategorie (Category)

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein Typ verfügt über ein Feld, das mit dem OptionalFieldAttribute-Attribut gekennzeichnet ist, und der Typ gibt keine Methoden für die Deserialisierungsereignisbehandlung an.

Regelbeschreibung

Das OptionalFieldAttribute-Attribut hat keine Auswirkungen auf die Serialisierung. Ein mit dem Attribut gekennzeichnetes Feld wird serialisiert.Das Feld wird bei der Deserialisierung jedoch ignoriert und behält den seinem Typ zugeordneten Standardwert bei.Deserialisierungsereignishandler sollten so deklariert werden, dass das Feld während der Deserialisierung festgelegt wird.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, fügen Sie dem Typ Methoden für die Deserialisierungsereignisbehandlung hinzu.

Wann sollten Warnungen unterdrückt werden?

Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn das Feld während der Deserialisierung ignoriert werden soll.

Beispiel

Im folgenden Beispiel wird ein Typ mit einem optionalen Feld und Methoden für die Deserialisierungsereignisbehandlung veranschaulicht.

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

Verwandte Regeln

CA2236: Basisklassenmethoden auf ISerializable-Typen aufrufen

CA2240: ISerializable ordnungsgemäß implementieren

CA2229: Serialisierungskonstruktoren implementieren

CA2238: Serialisierungsmethoden korrekt implementieren

CA2235: Alle nicht serialisierbaren Felder markieren

CA2237: Markieren von ISerializable-Typen mit SerializableAttribute

CA2120: Sichere Serialisierungskonstruktoren