Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
TypeName |
ProvideDeserializationMethodsForOptionalFields |
CheckId |
CA2239 |
Category |
Microsoft.Usage |
Breaking Change |
NonBreaking |
Cause
A type has a field that is marked with the System.Runtime.Serialization.OptionalFieldAttribute attribute and the type does not provide de-serialization event handling methods.
Rule Description
The OptionalFieldAttribute attribute has no effect on serialization; a field marked with the attribute is serialized. However, the field is ignored on de-serialization and retains the default value associated with its type. De-serialization event handlers should be declared to set the field during the de-serialization process.
How to Fix Violations
To fix a violation of this rule, add de-serialization event handling methods to the type.
When to Exclude Warnings
It is safe to exclude a warning from this rule if the field should be ignored during the de-serialization process.
Example
The following example shows a type with an optional field and de-serialization event handling methods.
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.
}
}
}
Related Rules
Call base class methods on ISerializable types
Implement ISerializable correctly
Implement serialization constructors
Implement serialization methods correctly
Mark all non-serializable fields
Mark ISerializable types with serializable