Udostępnij za pośrednictwem


CA2235: Należy oznaczyć wszystkie nieserializowane pola

TypeName

MarkAllNonSerializableFields

CheckId

CA2235

Kategoria

Microsoft.Usage

Zmiana kluczowa

Niekluczowa

Przyczyna

Pole wystąpienia typu, który nie może być serializowany, jest zadeklarowane w typie, który może być serializowany.

Opis reguły

Typ możliwy do serializacji jest oznaczony atrybutem SerializableAttribute.Gdy typ jest serializowany, zgłaszany jest wyjątek SerializationException, jeśli typ zawiera pole wystąpienia typu, który nie może być serializowane.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zastosuj do atrybut NonSerializedAttribute do pola, które nie może być serializowane.

Kiedy pominąć ostrzeżenia

Pomiń ostrzeżenie dotyczące tej reguły, tylko jeśli zadeklarowany jest typ ISerializationSurrogate, który umożliwia wystąpieniu pola serializację i deserializację.

Przykład

Poniższy przykład pokazuje typ, który narusza regułę oraz typ, który spełnia regułę.

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"); 
      }
   }
}

Powiązane reguły

CA2236: Wywołanie metod klasy podstawowej typu ISerializable

CA2240: Należy poprawnie zaimplementować ISerializable

CA2229: Należy zaimplementować konstruktory serializacji

CA2238: Należy poprawnie zaimplementować metody serializacji

CA2237: Należy oznaczyć typ ISerializable atrybutem SerializableAttribute

CA2239: Dostarcz metody deserializacji pól opcjonalnych

CA2120: Zabezpieczaj konstruktory serializacji