二進位序列化

序列化是將物件狀態儲存至儲存媒體的程式。 在二進位序列化中,物件的公用和私用欄位以及類別的名稱,包括包含 類別的元件會轉換成位元組資料流程,然後寫入資料流程。 當物件隨後還原序列化時,會建立與原始物件完全相同的複製品。

在物件導向的環境中實作序列化機制時,您通常需要在方便使用和彈性之間進行取捨。 若您對程序擁有足夠的控制,該程序可大幅自動化。 例如,可能有簡單二進位序列化並不足夠的情況,或有特定的理由需決定類別中哪個欄位需序列化。 下列各節檢查 .NET 所提供的穩固序列化機制,並強調數種能讓您自訂程序以滿足需求的重要功能。

注意

如果物件是使用不同的 .NET 版本序列化和還原序列化,則不會保留 UTF-8 或 UTF-7 編碼物件的狀態。

警告

二進位序列化可能帶來危害。 如需詳細資訊,請參閱 BinaryFormatter 安全性指南

二進位序列化允許修改 物件內的私用成員,因而變更其狀態。 因此,建議在公用 API 介面上運作的其他序列化架構,例如 System.Text.Json

.NET Core

.NET Core 支援類型子集的二進位序列化。 您可以在下列 可序列化類型 一節中看到支援的型別清單。 列出的類型保證可序列化.NET Framework 4.5.1 和更新版本,以及 .NET Core 2.0 和更新版本之間的序列化。 其他 .NET 實作,例如 Mono 並未正式支援,但也應該正常運作。

可序列化類型

類型 注意
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 從 .NET Core 2.0.4 開始。
Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException 從 .NET Core 2.0.4 開始。
System.AccessViolationException 從 .NET Core 2.0.4 開始。
System.AggregateException 從 .NET Core 2.0.4 開始。
System.AppDomainUnloadedException 從 .NET Core 2.0.4 開始。
System.ApplicationException 從 .NET Core 2.0.4 開始。
System.ArgumentException 從 .NET Core 2.0.4 開始。
System.ArgumentNullException 從 .NET Core 2.0.4 開始。
System.ArgumentOutOfRangeException 從 .NET Core 2.0.4 開始。
System.ArithmeticException 從 .NET Core 2.0.4 開始。
System.Array
System.ArraySegment<T>
System.ArrayTypeMismatchException 從 .NET Core 2.0.4 開始。
System.Attribute
System.BadImageFormatException 從 .NET Core 2.0.4 開始。
System.Boolean
System.Byte
System.CannotUnloadAppDomainException 從 .NET Core 2.0.4 開始。
System.Char
System.Collections.ArrayList
System.Collections.BitArray
System.Collections.Comparer
System.Collections.DictionaryEntry
System.Collections.Generic.Comparer<T>
System.Collections.Generic.Dictionary<TKey,TValue>
System.Collections.Generic.EqualityComparer<T>
System.Collections.Generic.HashSet<T>
System.Collections.Generic.KeyNotFoundException 從 .NET Core 2.0.4 開始。
System.Collections.Generic.KeyValuePair<TKey,TValue>
System.Collections.Generic.LinkedList<T>
System.Collections.Generic.List<T>
System.Collections.Generic.Queue<T>
System.Collections.Generic.SortedDictionary<TKey,TValue>
System.Collections.Generic.SortedList<TKey,TValue>
System.Collections.Generic.SortedSet<T>
System.Collections.Generic.Stack<T>
System.Collections.Hashtable
System.Collections.ObjectModel.Collection<T>
System.Collections.ObjectModel.KeyedCollection<TKey,TItem>
System.Collections.ObjectModel.ObservableCollection<T>
System.Collections.ObjectModel.ReadOnlyCollection<T>
System.Collections.ObjectModel.ReadOnlyDictionary<TKey,TValue>
System.Collections.ObjectModel.ReadOnlyObservableCollection<T>
System.Collections.Queue
System.Collections.SortedList
System.Collections.Specialized.HybridDictionary
System.Collections.Specialized.ListDictionary
System.Collections.Specialized.OrderedDictionary
System.Collections.Specialized.StringCollection
System.Collections.Specialized.StringDictionary
System.Collections.Stack
System.Collections.Generic.NonRandomizedStringEqualityComparer 從 .NET Core 2.0.4 開始。
System.ComponentModel.BindingList<T>
System.ComponentModel.DataAnnotations.ValidationException 從 .NET Core 2.0.4 開始。
System.ComponentModel.Design.CheckoutException 從 .NET Core 2.0.4 開始。
System.ComponentModel.InvalidAsynchronousStateException 從 .NET Core 2.0.4 開始。
System.ComponentModel.InvalidEnumArgumentException 從 .NET Core 2.0.4 開始。
System.ComponentModel.LicenseException 從 .NET Core 2.0.4 開始。
不支援從.NET Framework序列化至 .NET Core。
System.ComponentModel.WarningException 從 .NET Core 2.0.4 開始。
System.ComponentModel.Win32Exception 從 .NET Core 2.0.4 開始。
System.Configuration.ConfigurationErrorsException 從 .NET Core 2.0.4 開始。
System.Configuration.ConfigurationException 從 .NET Core 2.0.4 開始。
System.Configuration.Provider.ProviderException 從 .NET Core 2.0.4 開始。
System.Configuration.SettingsPropertyIsReadOnlyException 從 .NET Core 2.0.4 開始。
System.Configuration.SettingsPropertyNotFoundException 從 .NET Core 2.0.4 開始。
System.Configuration.SettingsPropertyWrongTypeException 從 .NET Core 2.0.4 開始。
System.ContextMarshalException 從 .NET Core 2.0.4 開始。
System.DBNull 從 .NET Core 2.0.2 和更新版本開始。
System.Data.Common.DbException 從 .NET Core 2.0.4 開始。
System.Data.ConstraintException 從 .NET Core 2.0.4 開始。
System.Data.DBConcurrencyException 從 .NET Core 2.0.4 開始。
System.Data.DataException 從 .NET Core 2.0.4 開始。
System.Data.DataSet
System.Data.DataTable 如果您設定 RemotingFormatSerializationFormat.Binary ,它只能與 .NET Core 2.1 和更新版本交換。
System.Data.DeletedRowInaccessibleException 從 .NET Core 2.0.4 開始。
System.Data.DuplicateNameException 從 .NET Core 2.0.4 開始。
System.Data.EvaluateException 從 .NET Core 2.0.4 開始。
System.Data.InRowChangingEventException 從 .NET Core 2.0.4 開始。
System.Data.InvalidConstraintException 從 .NET Core 2.0.4 開始。
System.Data.InvalidExpressionException 從 .NET Core 2.0.4 開始。
System.Data.MissingPrimaryKeyException 從 .NET Core 2.0.4 開始。
System.Data.NoNullAllowedException 從 .NET Core 2.0.4 開始。
System.Data.Odbc.OdbcException 從 .NET Core 2.0.4 開始。
System.Data.OperationAbortedException 從 .NET Core 2.0.4 開始。
System.Data.PropertyCollection
System.Data.ReadOnlyException 從 .NET Core 2.0.4 開始。
System.Data.RowNotInTableException 從 .NET Core 2.0.4 開始。
System.Data.SqlClient.SqlException 從 .NET Core 2.0.4 開始。
不支援從.NET Framework序列化至 .NET Core
System.Data.SqlTypes.SqlAlreadyFilledException 從 .NET Core 2.0.4 開始。
System.Data.SqlTypes.SqlBoolean
System.Data.SqlTypes.SqlByte
System.Data.SqlTypes.SqlDateTime
System.Data.SqlTypes.SqlDouble
System.Data.SqlTypes.SqlGuid
System.Data.SqlTypes.SqlInt16
System.Data.SqlTypes.SqlInt32
System.Data.SqlTypes.SqlInt64
System.Data.SqlTypes.SqlNotFilledException 從 .NET Core 2.0.4 開始。
System.Data.SqlTypes.SqlNullValueException 從 .NET Core 2.0.4 開始。
System.Data.SqlTypes.SqlString
System.Data.SqlTypes.SqlTruncateException 從 .NET Core 2.0.4 開始。
System.Data.SqlTypes.SqlTypeException 從 .NET Core 2.0.4 開始。
System.Data.StrongTypingException 從 .NET Core 2.0.4 開始。
System.Data.SyntaxErrorException 從 .NET Core 2.0.4 開始。
System.Data.VersionNotFoundException 從 .NET Core 2.0.4 開始。
System.DataMisalignedException 從 .NET Core 2.0.4 開始。
System.DateTime
System.DateTimeOffset
System.Decimal
System.Diagnostics.Contracts.ContractException 從 .NET Core 2.0.4 開始。
System.Diagnostics.Tracing.EventSourceException 從 .NET Core 2.0.4 開始。
System.IO.DirectoryNotFoundException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.AccountManagement.MultipleMatchesException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.AccountManagement.NoMatchingPrincipalException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.AccountManagement.PasswordException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.AccountManagement.PrincipalException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.AccountManagement.PrincipalExistsException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.AccountManagement.PrincipalOperationException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.AccountManagement.PrincipalServerDownException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectExistsException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.ActiveDirectory.ActiveDirectoryOperationException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.ActiveDirectory.ActiveDirectoryServerDownException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.ActiveDirectory.ForestTrustCollisionException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.ActiveDirectory.SyncFromAllServersOperationException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.DirectoryServicesCOMException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.Protocols.BerConversionException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.Protocols.DirectoryException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.Protocols.DirectoryOperationException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.Protocols.LdapException 從 .NET Core 2.0.4 開始。
System.DirectoryServices.Protocols.TlsOperationException 從 .NET Core 2.0.4 開始。
System.DivideByZeroException 從 .NET Core 2.0.4 開始。
System.DllNotFoundException 從 .NET Core 2.0.4 開始。
System.Double
System.Drawing.Bitmap 從 .NET Core 3.0 開始
System.Drawing.Color
System.Drawing.Icon 從 .NET Core 3.0 開始
System.Drawing.Image 從 .NET Core 3.0 開始
System.Drawing.Imaging.Metafile 從 .NET Core 3.0 開始
System.Drawing.Point
System.Drawing.PointF
System.Drawing.Rectangle
System.Drawing.RectangleF
System.Drawing.Size
System.Drawing.SizeF
System.DuplicateWaitObjectException 從 .NET Core 2.0.4 開始。
System.EntryPointNotFoundException 從 .NET Core 2.0.4 開始。
System.Enum
System.EventArgs 從 .NET Core 2.0.6 開始。
System.Exception
System.ExecutionEngineException 從 .NET Core 2.0.4 開始。
System.FieldAccessException 從 .NET Core 2.0.4 開始。
System.FormatException 從 .NET Core 2.0.4 開始。
System.Globalization.CompareInfo
System.Globalization.CultureNotFoundException 從 .NET Core 2.0.4 開始。
System.Globalization.SortVersion
System.Guid
System.IO.Compression.ZLibException 從 .NET Core 2.0.4 開始。
System.IO.DriveNotFoundException 從 .NET Core 2.0.4 開始。
System.IO.EndOfStreamException 從 .NET Core 2.0.4 開始。
System.IO.FileFormatException 從 .NET Core 2.0.4 開始。
System.IO.FileLoadException 從 .NET Core 2.0.4 開始。
System.IO.FileNotFoundException 從 .NET Core 2.0.4 開始。
System.IO.IOException 從 .NET Core 2.0.4 開始。
System.IO.InternalBufferOverflowException 從 .NET Core 2.0.4 開始。
System.IO.InvalidDataException 從 .NET Core 2.0.4 開始。
System.IO.IsolatedStorage.IsolatedStorageException 從 .NET Core 2.0.4 開始。
System.IO.PathTooLongException 從 .NET Core 2.0.4 開始。
System.IndexOutOfRangeException 從 .NET Core 2.0.4 開始。
System.InsufficientExecutionStackException 從 .NET Core 2.0.4 開始。
System.InsufficientMemoryException 從 .NET Core 2.0.4 開始。
System.Int16
System.Int32
System.Int64
System.IntPtr
System.InvalidCastException 從 .NET Core 2.0.4 開始。
System.InvalidOperationException 從 .NET Core 2.0.4 開始。
System.InvalidProgramException 從 .NET Core 2.0.4 開始。
System.InvalidTimeZoneException 從 .NET Core 2.0.4 開始。
System.MemberAccessException 從 .NET Core 2.0.4 開始。
System.MethodAccessException 從 .NET Core 2.0.4 開始。
System.MissingFieldException 從 .NET Core 2.0.4 開始。
System.MissingMemberException 從 .NET Core 2.0.4 開始。
System.MissingMethodException 從 .NET Core 2.0.4 開始。
System.MulticastNotSupportedException 從 .NET Core 2.0.4 開始。
System.Net.Cookie
System.Net.CookieCollection
System.Net.CookieContainer
System.Net.CookieException 從 .NET Core 2.0.4 開始。
System.Net.HttpListenerException 從 .NET Core 2.0.4 開始。
System.Net.Mail.SmtpException 從 .NET Core 2.0.4 開始。
System.Net.Mail.SmtpFailedRecipientException 從 .NET Core 2.0.4 開始。
System.Net.Mail.SmtpFailedRecipientsException 從 .NET Core 2.0.4 開始。
System.Net.NetworkInformation.NetworkInformationException 從 .NET Core 2.0.4 開始。
System.Net.NetworkInformation.PingException 從 .NET Core 2.0.4 開始。
System.Net.ProtocolViolationException 從 .NET Core 2.0.4 開始。
System.Net.Sockets.SocketException 從 .NET Core 2.0.4 開始。
System.Net.WebException 從 .NET Core 2.0.4 開始。
System.Net.WebSockets.WebSocketException 從 .NET Core 2.0.4 開始。
System.NotFiniteNumberException 從 .NET Core 2.0.4 開始。
System.NotImplementedException 從 .NET Core 2.0.4 開始。
System.NotSupportedException 從 .NET Core 2.0.4 開始。
System.NullReferenceException 從 .NET Core 2.0.4 開始。
System.Nullable<T>
System.Numerics.BigInteger
System.Numerics.Complex
System.Object
System.ObjectDisposedException 從 .NET Core 2.0.4 開始。
System.OperationCanceledException 從 .NET Core 2.0.4 開始。
System.OutOfMemoryException 從 .NET Core 2.0.4 開始。
System.OverflowException 從 .NET Core 2.0.4 開始。
System.PlatformNotSupportedException 從 .NET Core 2.0.4 開始。
System.RankException 從 .NET Core 2.0.4 開始。
System.Reflection.AmbiguousMatchException 從 .NET Core 2.0.4 開始。
System.Reflection.CustomAttributeFormatException 從 .NET Core 2.0.4 開始。
System.Reflection.InvalidFilterCriteriaException 從 .NET Core 2.0.4 開始。
System.Reflection.ReflectionTypeLoadException 從 .NET Core 2.0.4 開始。
不支援從.NET Framework序列化至 .NET Core。
System.Reflection.TargetException 從 .NET Core 2.0.4 開始。
System.Reflection.TargetInvocationException 從 .NET Core 2.0.4 開始。
System.Reflection.TargetParameterCountException 從 .NET Core 2.0.4 開始。
System.Resources.MissingManifestResourceException 從 .NET Core 2.0.4 開始。
System.Resources.MissingSatelliteAssemblyException 從 .NET Core 2.0.4 開始。
System.Runtime.CompilerServices.RuntimeWrappedException 從 .NET Core 2.0.4 開始。
System.Runtime.InteropServices.COMException 從 .NET Core 2.0.4 開始。
System.Runtime.InteropServices.ExternalException 從 .NET Core 2.0.4 開始。
System.Runtime.InteropServices.InvalidComObjectException 從 .NET Core 2.0.4 開始。
System.Runtime.InteropServices.InvalidOleVariantTypeException 從 .NET Core 2.0.4 開始。
System.Runtime.InteropServices.MarshalDirectiveException 從 .NET Core 2.0.4 開始。
System.Runtime.InteropServices.SEHException 從 .NET Core 2.0.4 開始。
System.Runtime.InteropServices.SafeArrayRankMismatchException 從 .NET Core 2.0.4 開始。
System.Runtime.InteropServices.SafeArrayTypeMismatchException 從 .NET Core 2.0.4 開始。
System.Runtime.Serialization.InvalidDataContractException 從 .NET Core 2.0.4 開始。
System.Runtime.Serialization.SerializationException 從 .NET Core 2.0.4 開始。
System.SByte
System.Security.AccessControl.PrivilegeNotHeldException 從 .NET Core 2.0.4 開始。
System.Security.Authentication.AuthenticationException 從 .NET Core 2.0.4 開始。
System.Security.Authentication.InvalidCredentialException 從 .NET Core 2.0.4 開始。
System.Security.Cryptography.CryptographicException 從 .NET Core 2.0.4 開始。
System.Security.Cryptography.CryptographicUnexpectedOperationException 從 .NET Core 2.0.4 開始。
System.Security.Cryptography.Xml.CryptoSignedXmlRecursionException 從 .NET Core 2.0.4 開始。
System.Security.HostProtectionException 從 .NET Core 2.0.4 開始。
System.Security.Policy.PolicyException 從 .NET Core 2.0.4 開始。
System.Security.Principal.IdentityNotMappedException 從 .NET Core 2.0.4 開始。
System.Security.SecurityException 從 .NET Core 2.0.4 開始。
有限的序列化資料。
System.Security.VerificationException 從 .NET Core 2.0.4 開始。
System.Security.XmlSyntaxException 從 .NET Core 2.0.4 開始。
System.ServiceProcess.TimeoutException 從 .NET Core 2.0.4 開始。
System.Single
System.StackOverflowException 從 .NET Core 2.0.4 開始。
System.String
System.StringComparer
System.SystemException 從 .NET Core 2.0.4 開始。
System.Text.DecoderFallbackException 從 .NET Core 2.0.4 開始。
System.Text.EncoderFallbackException 從 .NET Core 2.0.4 開始。
System.Text.RegularExpressions.RegexMatchTimeoutException 從 .NET Core 2.0.4 開始。
System.Text.StringBuilder
System.Threading.AbandonedMutexException 從 .NET Core 2.0.4 開始。
System.Threading.BarrierPostPhaseException 從 .NET Core 2.0.4 開始。
System.Threading.LockRecursionException 從 .NET Core 2.0.4 開始。
System.Threading.SemaphoreFullException 從 .NET Core 2.0.4 開始。
System.Threading.SynchronizationLockException 從 .NET Core 2.0.4 開始。
System.Threading.Tasks.TaskCanceledException 從 .NET Core 2.0.4 開始。
System.Threading.Tasks.TaskSchedulerException 從 .NET Core 2.0.4 開始。
System.Threading.ThreadAbortException 從 .NET Core 2.0.4 開始。
System.Threading.ThreadInterruptedException 從 .NET Core 2.0.4 開始。
System.Threading.ThreadStartException 從 .NET Core 2.0.4 開始。
System.Threading.ThreadStateException 從 .NET Core 2.0.4 開始。
System.Threading.WaitHandleCannotBeOpenedException 從 .NET Core 2.0.4 開始。
System.TimeSpan
System.TimeZoneInfo.AdjustmentRule
System.TimeZoneInfo
System.TimeZoneNotFoundException 從 .NET Core 2.0.4 開始。
System.TimeoutException 從 .NET Core 2.0.4 開始。
System.Transactions.TransactionAbortedException 從 .NET Core 2.0.4 開始。
System.Transactions.TransactionException 從 .NET Core 2.0.4 開始。
System.Transactions.TransactionInDoubtException 從 .NET Core 2.0.4 開始。
System.Transactions.TransactionManagerCommunicationException 從 .NET Core 2.0.4 開始。
System.Transactions.TransactionPromotionException 從 .NET Core 2.0.4 開始。
System.Tuple
System.TypeAccessException 從 .NET Core 2.0.4 開始。
System.TypeInitializationException 從 .NET Core 2.0.4 開始。
System.TypeLoadException 從 .NET Core 2.0.4 開始。
System.TypeUnloadedException 從 .NET Core 2.0.4 開始。
System.UInt16
System.UInt32
System.UInt64
System.UIntPtr
System.UnauthorizedAccessException 從 .NET Core 2.0.4 開始。
System.Uri
System.UriFormatException 從 .NET Core 2.0.4 開始。
System.ValueTuple 無法在 .NET Framework 4.7 和舊版中序列化。
System.ValueType
System.Version
System.WeakReference<T>
System.WeakReference
System.Xml.Schema.XmlSchemaException 從 .NET Core 2.0.4 開始。
System.Xml.Schema.XmlSchemaInferenceException 從 .NET Core 2.0.4 開始。
System.Xml.Schema.XmlSchemaValidationException 從 .NET Core 2.0.4 開始。
System.Xml.XPath.XPathException 從 .NET Core 2.0.4 開始。
System.Xml.XmlException 從 .NET Core 2.0.4 開始。
System.Xml.Xsl.XsltCompileException 從 .NET Core 2.0.4 開始。
System.Xml.Xsl.XsltException 從 .NET Core 2.0.4 開始。

另請參閱