Bahasa
Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA2235 |
| Judul | Menandai semua bidang yang tidak dapat diserialisasikan |
| Kategori | Penggunaan |
| Perbaikan bersifat merusak atau tidak merusak | Tidak terputus |
| Diaktifkan secara default di .NET 10 | Tidak |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Bidang instans dari tipe yang tidak dapat diserialisasi dideklarasikan dalam tipe yang dapat diserialisasi.
Deskripsi aturan
Jenis yang dapat diserialisasikan adalah jenis yang ditandai dengan System.SerializableAttribute atribut . Saat tipe diserialisasikan, System.Runtime.Serialization.SerializationException pengecualian akan dilemparkan jika tipe berisi bidang instans dari tipe yang tidak dapat diserialisasikan dan tidak mengimplementasikan antarmuka System.Runtime.Serialization.ISerializable.
Tips
CA2235 tidak memicu untuk bidang instans dari tipe yang mengimplementasikan ISerializable karena mereka menyediakan logika serialisasi mereka sendiri.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, terapkan System.NonSerializedAttribute atribut ke bidang yang tidak dapat diserialisasikan.
Kapan harus menekan peringatan
Hanya tekan peringatan dari aturan ini jika jenis System.Runtime.Serialization.ISerializationSurrogate dinyatakan yang memungkinkan instans bidang dapat diserialisasi dan dideserialisasi.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA2235
// The code that's violating the rule is on this line.
#pragma warning restore CA2235
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA2235.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh
Contoh berikut menunjukkan dua jenis: satu yang melanggar aturan dan yang memenuhi aturan.
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
Keterangan
Aturan CA2235 tidak menganalisis jenis yang mengimplementasikan ISerializable antarmuka (kecuali mereka juga ditandai dengan SerializableAttribute atribut ). Ini karena aturan CA2237 sudah merekomendasikan jenis penandaan yang mengimplementasikan ISerializable antarmuka dengan SerializableAttribute atribut .