Sdílet prostřednictvím


Deserialisierungsmethoden für optionale Felder angeben

Aktualisiert: November 2007

     TypeName

ProvideDeserializationMethodsForOptionalFields

CheckId

CA2239

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein Typ verfügt über ein Feld, das mit dem System.Runtime.Serialization.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.

Behandlung 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

Basisklassenmethoden in ISerializable-Typen aufrufen

ISerializable ordnungsgemäß implementieren

Serialisierungskonstruktoren implementieren

Serialisierungsmethoden korrekt implementieren?

Alle nicht serialisierbaren Felder markieren

Markieren von ISerializable-Typen mit SerializableAttribute

Sichere Serialisierungskonstruktoren