CA2239: オプションのフィールドに逆シリアル化メソッドを指定します

TypeName

ProvideDeserializationMethodsForOptionalFields

CheckId

CA2239

カテゴリ

Microsoft.Usage

互換性に影響する変更点

なし

原因

型に System.Runtime.Serialization.OptionalFieldAttribute 属性マークされているフィールドがあり、その型に逆シリアル化のイベント ハンドラー メソッドがありません。

規則の説明

OptionalFieldAttribute 属性はシリアル化に何も影響を及ぼしません。この属性でマークされたフィールドはシリアル化されます。 ただし、逆シリアル化の場合、フィールドは無視され、その型に関連付けられた既定値を保持します。 逆シリアル化プロセス時にフィールドを設定するには、逆シリアル化のイベント ハンドラーを宣言します。

違反の修正方法

この規則違反を修正するには、型に逆シリアル化のイベント ハンドラー メソッドを追加します。

警告を抑制する状況

逆シリアル化プロセスでこのフィールドが無視される場合は、この規則による警告を抑制しても安全です。

使用例

オプションのフィールドと逆シリアル化のイベント ハンドラー メソッドのある型を、次の例に示します。

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.
      }
   }
}

関連規則

CA2236: ISerializable 型で基本クラス メソッドを呼び出します

CA2240: ISerializable を正しく実装します

CA2229: シリアル化コンストラクターを実装します

CA2238: シリアル化メソッドを正しく実装します

CA2235: すべてのシリアル化不可能なフィールドを設定します

CA2237: ISerializable 型を SerializableAttribute に設定します

CA2120: シリアル化コンストラクターをセキュリティで保護します