Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA2235 |
| Cím | Az összes nem szerializálható mező megjelölése |
| Kategória | Használat |
| A javítás romboló vagy nem romboló | Nem törhető |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
| Alkalmazandó nyelvek | C# és Visual Basic |
Ok
A nem szerializálható típusú példánymezők szerializálható típusban deklarálhatók.
Szabály leírása
A szerializálható típus az attribútummal System.SerializableAttribute megjelölt típus. Ha a típus szerializálva van, System.Runtime.Serialization.SerializationException kivételt dob, ha a típus olyan példánymezőt tartalmaz, amely nem szerializálható és nem valósítja meg a System.Runtime.Serialization.ISerializable interfészt.
Tipp.
A CA2235 nem lép működésbe azoknál a típust megvalósító ISerializable példánymezőknél, amelyek saját szerializálási logikát biztosítanak.
Szabálysértések kijavítása
A szabály megsértésének kijavításához alkalmazza az System.NonSerializedAttribute attribútumot a nem szerializálható mezőre.
Mikor kell letiltani a figyelmeztetéseket?
Csak akkor nyomja el a szabály figyelmeztetését, ha egy System.Runtime.Serialization.ISerializationSurrogate típust definiáltak, amely lehetővé teszi a mező példányainak szerializálását és deszerializálását.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA2235
// The code that's violating the rule is on this line.
#pragma warning restore CA2235
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA2235.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példa
Az alábbi példa két típust mutat be: egyet, amely megsérti a szabályt, és egyet, amely megfelel a szabálynak.
public class Mouse(int numberOfButtons, string scanType)
{
public int NumberOfButtons { get; } = numberOfButtons;
public string ScanType { get; } = scanType;
}
[Serializable]
public class InputDevices1
{
// Violates MarkAllNonSerializableFields.
readonly Mouse _opticalMouse;
public InputDevices1()
{
_opticalMouse = new Mouse(5, "optical");
}
}
[Serializable]
public class InputDevices2
{
// Satisfies MarkAllNonSerializableFields.
[NonSerialized]
readonly Mouse _opticalMouse;
public InputDevices2()
{
_opticalMouse = new Mouse(5, "optical");
}
}
Imports System
Imports System.Runtime.Serialization
Namespace ca2235
Public Class Mouse
ReadOnly Property NumberOfButtons As Integer
ReadOnly Property ScanType As String
Sub New(numberOfButtons As Integer, scanType As String)
Me.NumberOfButtons = numberOfButtons
Me.ScanType = 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
Megjegyzések
A CA2235 szabály nem elemzi az ISerializable illesztőt megvalósító típusokat (kivéve, ha azokat az SerializableAttribute attribútummal is megjelöli). Ennek az az oka, hogy a CA2237 szabály már azt javasolja, hogy jelölje meg azokat a típusokat, amelyek implementálják az ISerializable interfészt az SerializableAttribute attribútummal.