Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch
Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

CA2235: Alle nicht serialisierbaren Felder markieren

TypeName

MarkAllNonSerializableFields

CheckId

CA2235

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Ein Instanzenfeld eines Typs, der nicht serialisierbar ist, ist in einem serialisierbaren Typ deklariert.

Ein serialisierbarer Typ wird mit dem System.SerializableAttribute-Attribut markiert. Wenn der Typ serialisiert ist, wird eine System.Runtime.Serialization.SerializationException-Ausnahme ausgelöst, falls ein Typ ein Instanzenfeld eines nicht serialisierbaren Typs enthält.

Um einen Verstoß gegen diese Regel zu beheben, wenden Sie das System.NonSerializedAttribute-Attribut auf das nicht serialisierbare Feld an.

Unterdrücken Sie nur dann eine Warnung dieser Regel, wenn ein System.Runtime.Serialization.ISerializationSurrogate-Typ deklariert wird, der die Serialisierung und Deserialisierung von Instanzen des Felds zulässt.

Das folgende Beispiel zeigt einen Typ, der gegen die Regel verstößt, und einen Typ, der der Regel entspricht.


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


Anzeigen: