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