Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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