次の方法で共有


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

更新 : 2007 年 11 月

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

関連規則

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

ISerializable を正しく実装します

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

シリアル化メソッドを適切に実装します

シリアル化できないフィールドをすべてマークします

ISerializable 型を SerializableAttribute とマークします

シリアル化コンストラクタを保護します