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