다음을 통해 공유


CA2235: 모두 serialize할 수 없는 필드로 표시하십시오.

TypeName

MarkAllNonSerializableFields

CheckId

CA2235

범주

Microsoft.Usage

변경 수준

주요 변경 아님

원인

serialize할 수 없는 형식의 인스턴스 필드가 serialize할 수 있는 형식에 정의되었습니다.

규칙 설명

serialize할 수 있는 형식은 System.SerializableAttribute 특성으로 표시된 형식입니다. 형식이 serialize될 때 형식에 serialize할 수 없는 형식의 인스턴스 필드가 있으면 System.Runtime.Serialization.SerializationException 예외가 throw됩니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 serialize할 수 없는 필드에 System.NonSerializedAttribute 특성을 적용합니다.

경고를 표시하지 않는 경우

필드의 인스턴스를 serialize 및 deserialize할 수 있도록 허용하는 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: serialization 생성자를 구현하십시오.

CA2238: serialization 메서드를 올바르게 구현하십시오.

CA2237: ISerializable 형식을 SerializableAttribute로 표시하십시오.

CA2239: 선택적 필드에 deserialization 메서드를 제공하십시오.

CA2120: serialization 생성자를 안전하게 하십시오.