Provide deserialization methods for optional fields
TOC
Collapse the table of content
Expand the table of content
The document is archived and information here might be outdated

Provide deserialization methods for optional fields

TypeName

ProvideDeserializationMethodsForOptionalFields

CheckId

CA2239

Category

Microsoft.Usage

Breaking Change

Non Breaking

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.

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.

To fix a violation of this rule, add de-serialization event handling methods to the type.

It is safe to suppress a warning from this rule if the field should be ignored during the de-serialization process.

The following example shows a type with an optional field and de-serialization event handling methods.

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.
      }
   }
}
Show:
© 2016 Microsoft