次の方法で共有


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

TypeName

MarkISerializableTypesWithSerializable

CheckId

CA2237

[カテゴリ]

Microsoft.Usage

互換性に影響する変更点

なし

原因

外部から参照できる型で、System.Runtime.Serialization.ISerializable インターフェイスを実装していますが、その型は System.SerializableAttribute 属性でマークされていません。この規則では、基本型がシリアル化できない派生型は無視されます。

規則の説明

共通言語ランタイムでシリアル化できると認識されるには、型を SerializableAttribute 属性でマークする必要があります。ISerializable インターフェイスを実装して、型でカスタムのシリアル化ルーチンを使用している場合でも、マークする必要があります。

違反の修正方法

この規則違反を修正するには、型に SerializableAttribute 属性を適用します。

警告を抑制する状況

例外クラスの場合、複数のアプリケーション ドメインで正しく機能するように、シリアル化できる必要があるため、この規則による警告を抑制しないでください。

使用例

この規則に違反する型を次の例に示します。この規則に適合するには、SerializableAttribute 属性行をコメントから外します。

Imports System
Imports System.Runtime.Serialization
Imports System.Security.Permissions

Namespace UsageLibrary

   ' <SerializableAttribute> _ 
   Public Class BaseType
      Implements ISerializable

      Dim baseValue As Integer

      Sub New()
         baseValue = 3
      End Sub

      Protected Sub New( _ 
         info As SerializationInfo, context As StreamingContext)

         baseValue = info.GetInt32("baseValue")

      End Sub

      <SecurityPermissionAttribute(SecurityAction.Demand, _ 
          SerializationFormatter := True)> _ 
      Overridable Sub GetObjectData( _ 
         info As SerializationInfo, context As StreamingContext) _ 
         Implements ISerializable.GetObjectData

         info.AddValue("baseValue", baseValue)

      End Sub

   End Class

End Namespace
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);
      }
   }
}

関連規則

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

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

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

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

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

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

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