Share via


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

Item [値]
規則 ID CA2236
カテゴリ Microsoft.Usage
互換性に影響する変更点 なし

原因

型が、System.Runtime.Serialization.ISerializable インターフェイスを実装している型から派生していて、以下の条件のいずれかに該当しています。

規則の説明

カスタムのシリアル化プロセスでは、型に、フィールドをシリアル化する GetObjectData メソッドと、フィールドを逆シリアル化するシリアル化コンストラクターを実装します。 型が ISerializable インターフェイスを実装する型から派生している場合は、基本データ型 GetObjectData のメソッドとシリアル化コンストラクターを呼び出して、その基本データ型のフィールドをシリアル化および逆シリアル化する必要があります。 それ以外の場合、その型のシリアル化と逆シリアル化が正しく行われません。 派生型で新しいフィールドが追加されない場合、その型では、GetObjectData メソッドやシリアル化コンストラクターを実装したり、同等の基本データ型を呼び出したりする必要がないことに注意してください。

違反の修正方法

この規則違反を修正するには、基本データ型の GetObjectData メソッドまたはシリアル化コンストラクターを、対応する派生型のメソッドまたはコンストラクターから呼び出します。

どのようなときに警告を抑制するか

この規則による警告は抑制しないでください。

次の例は、シリアル化コンストラクターと基底クラスの GetObjectData メソッドを呼び出すことによってこの規則に従っている派生型を示しています。

using System;
using System.Runtime.Serialization;
using System.Security.Permissions;

namespace UsageLibrary
{
   [SerializableAttribute]
   public class BaseType : ISerializable
   {
      int baseValue;

      public BaseType()
      {
         baseValue = 3;
      }

      protected BaseType(
         SerializationInfo info, StreamingContext context)
      {
         baseValue = info.GetInt32("baseValue");
      }

      [SecurityPermissionAttribute(SecurityAction.Demand, 
          SerializationFormatter = true)]
      public virtual void GetObjectData(
         SerializationInfo info, StreamingContext context)
      {
         info.AddValue("baseValue", baseValue);
      }
   }

   [SerializableAttribute]
   public class DerivedType : BaseType
   {
      int derivedValue;

      public DerivedType()
      {
         derivedValue = 4;
      }

      protected DerivedType(
         SerializationInfo info, StreamingContext context) : 
         base(info, context)
      {
         derivedValue = info.GetInt32("derivedValue");
      }

      [SecurityPermissionAttribute(SecurityAction.Demand, 
          SerializationFormatter = true)]
      public override void GetObjectData(
         SerializationInfo info, StreamingContext context)
      {
         info.AddValue("derivedValue", derivedValue);
         base.GetObjectData(info, context);
      }
   }
}

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

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

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

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

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

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

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