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

TypeName

MarkAllNonSerializableFields

CheckId

CA2235

カテゴリ

Microsoft.Usage

互換性に影響する変更点

なし

原因

シリアル化できない型のインスタンス フィールドが、シリアル化できる型で宣言されています。

規則の説明

シリアル化できる型とは、System.SerializableAttribute 属性でマークされている型です。 型をシリアル化するとき、型にシリアル化できない型のインスタンス フィールドが含まれると、System.Runtime.Serialization.SerializationException 例外がスローされます。

違反の修正方法

この規則違反を修正するには、シリアル化できないフィールドに System.NonSerializedAttribute 属性を適用します。

警告を抑制する状況

フィールドのインスタンスをシリアル化および逆シリアル化できるように System.Runtime.Serialization.ISerializationSurrogate 型を宣言する場合にのみ、この規則による警告を抑制します。

使用例

この規則に違反している型と、規則に適合する型を次の例に示します。

Imports System
Imports System.Runtime.Serialization

Namespace UsageLibrary

   Public Class Mouse

      Dim buttons As Integer
      Dim scanTypeValue As String

      ReadOnly Property NumberOfButtons As Integer
         Get
            Return buttons
         End Get
      End Property

      ReadOnly Property ScanType As String
         Get
            Return scanTypeValue
         End Get
      End Property

      Sub New(numberOfButtons As Integer, scanType As String)
         buttons = numberOfButtons
         scanTypeValue = scanType
      End Sub

   End Class

   <SerializableAttribute> _ 
   Public Class InputDevices1

      ' Violates MarkAllNonSerializableFields.
      Dim opticalMouse As Mouse 

      Sub New()
         opticalMouse = New Mouse(5, "optical") 
      End Sub

   End Class

   <SerializableAttribute> _ 
   Public Class InputDevices2

      ' Satisfies MarkAllNonSerializableFields.
      <NonSerializedAttribute> _ 
      Dim opticalMouse As Mouse 

      Sub New()
         opticalMouse = New Mouse(5, "optical") 
      End Sub

   End Class

End Namespace
using System;
using System.Runtime.Serialization;

namespace UsageLibrary
{
   public class Mouse
   {
      int buttons;
      string scanTypeValue;

      public int NumberOfButtons
      {
         get { return buttons; }
      }

      public string ScanType
      {
         get { return scanTypeValue; }
      }

      public Mouse(int numberOfButtons, string scanType)
      {
         buttons = numberOfButtons;
         scanTypeValue = scanType;
      }
   }

   [SerializableAttribute]
   public class InputDevices1
   {
      // Violates MarkAllNonSerializableFields.
      Mouse opticalMouse;

      public InputDevices1()
      {
         opticalMouse = new Mouse(5, "optical"); 
      }
   }

   [SerializableAttribute]
   public class InputDevices2
   {
      // Satisfies MarkAllNonSerializableFields.
      [NonSerializedAttribute]
      Mouse opticalMouse;

      public InputDevices2()
      {
         opticalMouse = new Mouse(5, "optical"); 
      }
   }
}

関連規則

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

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

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

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

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

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

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